Print this page
use NULL capable segop as a shorthand for no-capabilities
Instead of forcing every segment driver to implement a dummy "return 0"
function, handle NULL capable segop function pointer as "no copabilities
supported" shorthand.

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/vm/seg_map.c
          +++ new/usr/src/uts/common/vm/seg_map.c
↓ open down ↓ 80 lines elided ↑ open up ↑
  81   81  static int      segmap_getprot(struct seg *seg, caddr_t addr, size_t len,
  82   82                          uint_t *protv);
  83   83  static u_offset_t       segmap_getoffset(struct seg *seg, caddr_t addr);
  84   84  static int      segmap_gettype(struct seg *seg, caddr_t addr);
  85   85  static int      segmap_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
  86   86  static void     segmap_dump(struct seg *seg);
  87   87  static int      segmap_pagelock(struct seg *seg, caddr_t addr, size_t len,
  88   88                          struct page ***ppp, enum lock_type type,
  89   89                          enum seg_rw rw);
  90   90  static int      segmap_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
  91      -static int      segmap_capable(struct seg *seg, segcapability_t capability);
  92   91  
  93   92  /* segkpm support */
  94   93  static caddr_t  segmap_pagecreate_kpm(struct seg *, vnode_t *, u_offset_t,
  95   94                          struct smap *, enum seg_rw);
  96   95  struct smap     *get_smap_kpm(caddr_t, page_t **);
  97   96  
  98   97  static struct seg_ops segmap_ops = {
  99   98          .free           = segmap_free,
 100   99          .fault          = segmap_fault,
 101  100          .faulta         = segmap_faulta,
 102  101          .checkprot      = segmap_checkprot,
 103  102          .kluster        = segmap_kluster,
 104  103          .getprot        = segmap_getprot,
 105  104          .getoffset      = segmap_getoffset,
 106  105          .gettype        = segmap_gettype,
 107  106          .getvp          = segmap_getvp,
 108  107          .dump           = segmap_dump,
 109  108          .pagelock       = segmap_pagelock,
 110  109          .getmemid       = segmap_getmemid,
 111      -        .capable        = segmap_capable,
 112  110  };
 113  111  
 114  112  /*
 115  113   * Private segmap routines.
 116  114   */
 117  115  static void     segmap_unlock(struct hat *hat, struct seg *seg, caddr_t addr,
 118  116                          size_t len, enum seg_rw rw, struct smap *smp);
 119  117  static void     segmap_smapadd(struct smap *smp);
 120  118  static struct smap *segmap_hashin(struct smap *smp, struct vnode *vp,
 121  119                          u_offset_t off, int hashid);
↓ open down ↓ 2036 lines elided ↑ open up ↑
2158 2156          return (ENOTSUP);
2159 2157  }
2160 2158  
2161 2159  static int
2162 2160  segmap_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
2163 2161  {
2164 2162          struct segmap_data *smd = (struct segmap_data *)seg->s_data;
2165 2163  
2166 2164          memidp->val[0] = (uintptr_t)smd->smd_sm->sm_vp;
2167 2165          memidp->val[1] = smd->smd_sm->sm_off + (uintptr_t)(addr - seg->s_base);
2168      -        return (0);
2169      -}
2170      -
2171      -/*ARGSUSED*/
2172      -static int
2173      -segmap_capable(struct seg *seg, segcapability_t capability)
2174      -{
2175 2166          return (0);
2176 2167  }
2177 2168  
2178 2169  
2179 2170  #ifdef  SEGKPM_SUPPORT
2180 2171  
2181 2172  /*
2182 2173   * segkpm support routines
2183 2174   */
2184 2175  
↓ open down ↓ 141 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX