Print this page
use NULL setpagesize segop as a shorthand for ENOTSUP
Instead of forcing every segment driver to implement a dummp function to
return (hopefully) ENOTSUP, handle NULL setpagesize segop function pointer
as "return ENOTSUP" shorthand.

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/vm/seg_spt.c
          +++ new/usr/src/uts/common/vm/seg_spt.c
↓ open down ↓ 101 lines elided ↑ open up ↑
 102  102  static int segspt_shmgetprot(struct seg *seg, caddr_t addr, size_t len,
 103  103                          uint_t *protv);
 104  104  static u_offset_t segspt_shmgetoffset(struct seg *seg, caddr_t addr);
 105  105  static int segspt_shmgettype(struct seg *seg, caddr_t addr);
 106  106  static int segspt_shmgetvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
 107  107  static int segspt_shmadvise(struct seg *seg, caddr_t addr, size_t len,
 108  108                          uint_t behav);
 109  109  static void segspt_shmdump(struct seg *seg);
 110  110  static int segspt_shmpagelock(struct seg *, caddr_t, size_t,
 111  111                          struct page ***, enum lock_type, enum seg_rw);
 112      -static int segspt_shmsetpgsz(struct seg *, caddr_t, size_t, uint_t);
 113  112  static int segspt_shmgetmemid(struct seg *, caddr_t, memid_t *);
 114  113  static lgrp_mem_policy_info_t *segspt_shmgetpolicy(struct seg *, caddr_t);
 115  114  
 116  115  struct seg_ops segspt_shmops = {
 117  116          .dup            = segspt_shmdup,
 118  117          .unmap          = segspt_shmunmap,
 119  118          .free           = segspt_shmfree,
 120  119          .fault          = segspt_shmfault,
 121  120          .faulta         = segspt_shmfaulta,
 122  121          .setprot        = segspt_shmsetprot,
↓ open down ↓ 2 lines elided ↑ open up ↑
 125  124          .sync           = segspt_shmsync,
 126  125          .incore         = segspt_shmincore,
 127  126          .lockop         = segspt_shmlockop,
 128  127          .getprot        = segspt_shmgetprot,
 129  128          .getoffset      = segspt_shmgetoffset,
 130  129          .gettype        = segspt_shmgettype,
 131  130          .getvp          = segspt_shmgetvp,
 132  131          .advise         = segspt_shmadvise,
 133  132          .dump           = segspt_shmdump,
 134  133          .pagelock       = segspt_shmpagelock,
 135      -        .setpagesize    = segspt_shmsetpgsz,
 136  134          .getmemid       = segspt_shmgetmemid,
 137  135          .getpolicy      = segspt_shmgetpolicy,
 138  136  };
 139  137  
 140  138  static void segspt_purge(struct seg *seg);
 141  139  static int segspt_reclaim(void *, caddr_t, size_t, struct page **,
 142  140                  enum seg_rw, int);
 143  141  static int spt_anon_getpages(struct seg *seg, caddr_t addr, size_t len,
 144  142                  page_t **ppa);
 145  143  
↓ open down ↓ 2803 lines elided ↑ open up ↑
2949 2947          }
2950 2948  
2951 2949          return (0);
2952 2950  }
2953 2951  
2954 2952  /*ARGSUSED*/
2955 2953  void
2956 2954  segspt_shmdump(struct seg *seg)
2957 2955  {
2958 2956          /* no-op for ISM segment */
2959      -}
2960      -
2961      -/*ARGSUSED*/
2962      -static faultcode_t
2963      -segspt_shmsetpgsz(struct seg *seg, caddr_t addr, size_t len, uint_t szc)
2964      -{
2965      -        return (ENOTSUP);
2966 2957  }
2967 2958  
2968 2959  /*
2969 2960   * get a memory ID for an addr in a given segment
2970 2961   */
2971 2962  static int
2972 2963  segspt_shmgetmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
2973 2964  {
2974 2965          struct shm_data *shmd = (struct shm_data *)seg->s_data;
2975 2966          struct anon     *ap;
↓ open down ↓ 72 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX