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_kp.c
          +++ new/usr/src/uts/common/vm/seg_kp.c
↓ open down ↓ 86 lines elided ↑ open up ↑
  87   87  static caddr_t  segkp_get_internal(struct seg *seg, size_t len, uint_t flags,
  88   88                          struct segkp_data **tkpd, struct anon_map *amp);
  89   89  static void     segkp_release_internal(struct seg *seg,
  90   90                          struct segkp_data *kpd, size_t len);
  91   91  static int      segkp_unlock(struct hat *hat, struct seg *seg, caddr_t vaddr,
  92   92                          size_t len, struct segkp_data *kpd, uint_t flags);
  93   93  static int      segkp_load(struct hat *hat, struct seg *seg, caddr_t vaddr,
  94   94                          size_t len, struct segkp_data *kpd, uint_t flags);
  95   95  static struct   segkp_data *segkp_find(struct seg *seg, caddr_t vaddr);
  96   96  static int      segkp_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
  97      -static int      segkp_capable(struct seg *seg, segcapability_t capability);
  98   97  
  99   98  /*
 100   99   * Lock used to protect the hash table(s) and caches.
 101  100   */
 102  101  static kmutex_t segkp_lock;
 103  102  
 104  103  /*
 105  104   * The segkp caches
 106  105   */
 107  106  static struct segkp_cache segkp_cache[SEGKP_MAX_CACHE];
↓ open down ↓ 32 lines elided ↑ open up ↑
 140  139  pgcnt_t anon_segkp_pages_locked;        /* See vm/anon.h */
 141  140  pgcnt_t anon_segkp_pages_resv;          /* anon reserved by seg_kp */
 142  141  
 143  142  static struct   seg_ops segkp_ops = {
 144  143          .fault          = segkp_fault,
 145  144          .checkprot      = segkp_checkprot,
 146  145          .kluster        = segkp_kluster,
 147  146          .dump           = segkp_dump,
 148  147          .pagelock       = segkp_pagelock,
 149  148          .getmemid       = segkp_getmemid,
 150      -        .capable        = segkp_capable,
 151  149  };
 152  150  
 153  151  
 154  152  static void segkpinit_mem_config(struct seg *);
 155  153  
 156  154  static uint32_t segkp_indel;
 157  155  
 158  156  /*
 159  157   * Allocate the segment specific private data struct and fill it in
 160  158   * with the per kp segment mutex, anon ptr. array and hash table.
↓ open down ↓ 1200 lines elided ↑ open up ↑
1361 1359      struct page ***ppp, enum lock_type type, enum seg_rw rw)
1362 1360  {
1363 1361          return (ENOTSUP);
1364 1362  }
1365 1363  
1366 1364  /*ARGSUSED*/
1367 1365  static int
1368 1366  segkp_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
1369 1367  {
1370 1368          return (ENODEV);
1371      -}
1372      -
1373      -/*ARGSUSED*/
1374      -static int
1375      -segkp_capable(struct seg *seg, segcapability_t capability)
1376      -{
1377      -        return (0);
1378 1369  }
1379 1370  
1380 1371  #include <sys/mem_config.h>
1381 1372  
1382 1373  /*ARGSUSED*/
1383 1374  static void
1384 1375  segkp_mem_config_post_add(void *arg, pgcnt_t delta_pages)
1385 1376  {}
1386 1377  
1387 1378  /*
↓ open down ↓ 36 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX