Print this page
use NULL dump segop as a shorthand for no-op
Instead of forcing every segment driver to implement a dummy function that
does nothing, handle NULL dump segop function pointer as a no-op 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 ↓ 98 lines elided ↑ open up ↑
  99   99                          int attr, uint_t flags);
 100  100  static int segspt_shmlockop(struct seg *seg, caddr_t addr, size_t len,
 101  101                          int attr, int op, ulong_t *lockmap, size_t pos);
 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      -static void segspt_shmdump(struct seg *seg);
 110  109  static int segspt_shmpagelock(struct seg *, caddr_t, size_t,
 111  110                          struct page ***, enum lock_type, enum seg_rw);
 112  111  static int segspt_shmgetmemid(struct seg *, caddr_t, memid_t *);
 113  112  static lgrp_mem_policy_info_t *segspt_shmgetpolicy(struct seg *, caddr_t);
 114  113  
 115  114  const struct seg_ops segspt_shmops = {
 116  115          .dup            = segspt_shmdup,
 117  116          .unmap          = segspt_shmunmap,
 118  117          .free           = segspt_shmfree,
 119  118          .fault          = segspt_shmfault,
↓ open down ↓ 2 lines elided ↑ open up ↑
 122  121          .checkprot      = segspt_shmcheckprot,
 123  122          .kluster        = segspt_shmkluster,
 124  123          .sync           = segspt_shmsync,
 125  124          .incore         = segspt_shmincore,
 126  125          .lockop         = segspt_shmlockop,
 127  126          .getprot        = segspt_shmgetprot,
 128  127          .getoffset      = segspt_shmgetoffset,
 129  128          .gettype        = segspt_shmgettype,
 130  129          .getvp          = segspt_shmgetvp,
 131  130          .advise         = segspt_shmadvise,
 132      -        .dump           = segspt_shmdump,
 133  131          .pagelock       = segspt_shmpagelock,
 134  132          .getmemid       = segspt_shmgetmemid,
 135  133          .getpolicy      = segspt_shmgetpolicy,
 136  134  };
 137  135  
 138  136  static void segspt_purge(struct seg *seg);
 139  137  static int segspt_reclaim(void *, caddr_t, size_t, struct page **,
 140  138                  enum seg_rw, int);
 141  139  static int spt_anon_getpages(struct seg *seg, caddr_t addr, size_t len,
 142  140                  page_t **ppa);
↓ open down ↓ 2797 lines elided ↑ open up ↑
2940 2938                   * underlying segment to calculate anon index and get
2941 2939                   * anonmap and vnode pointer from
2942 2940                   */
2943 2941                  if (shmd->shm_softlockcnt > 0)
2944 2942                          segspt_purge(seg);
2945 2943  
2946 2944                  page_mark_migrate(seg, shm_addr, size, amp, 0, NULL, 0, 0);
2947 2945          }
2948 2946  
2949 2947          return (0);
2950      -}
2951      -
2952      -/*ARGSUSED*/
2953      -void
2954      -segspt_shmdump(struct seg *seg)
2955      -{
2956      -        /* no-op for ISM segment */
2957 2948  }
2958 2949  
2959 2950  /*
2960 2951   * get a memory ID for an addr in a given segment
2961 2952   */
2962 2953  static int
2963 2954  segspt_shmgetmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
2964 2955  {
2965 2956          struct shm_data *shmd = (struct shm_data *)seg->s_data;
2966 2957          struct anon     *ap;
↓ open down ↓ 72 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX