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.


  89  * segmap_kpm -- separate on/off switch for segmap using segkpm:
  90  * . Set by default.
  91  * . Will be disabled when kpm_enable is zero.
  92  * . Will be disabled when MAXBSIZE != PAGESIZE.
  93  * . Can be disabled via /etc/system.
  94  *
  95  */
  96 int kpm_enable = 1;
  97 int kpm_smallpages = 0;
  98 int segmap_kpm = 1;
  99 
 100 /*
 101  * Private seg op routines.
 102  */
 103 faultcode_t segkpm_fault(struct hat *hat, struct seg *seg, caddr_t addr,
 104                         size_t len, enum fault_type type, enum seg_rw rw);
 105 static void     segkpm_dump(struct seg *);
 106 static int      segkpm_pagelock(struct seg *seg, caddr_t addr, size_t len,
 107                         struct page ***page, enum lock_type type,
 108                         enum seg_rw rw);
 109 static int      segkpm_capable(struct seg *, segcapability_t);
 110 
 111 static struct seg_ops segkpm_ops = {
 112         .fault          = segkpm_fault,
 113         .dump           = segkpm_dump,
 114         .pagelock       = segkpm_pagelock,
 115         .capable        = segkpm_capable,
 116 //#ifndef SEGKPM_SUPPORT
 117 #if 0
 118 #error FIXME: define nop
 119         .dup            = nop,
 120         .unmap          = nop,
 121         .free           = nop,
 122         .faulta         = nop,
 123         .setprot        = nop,
 124         .checkprot      = nop,
 125         .kluster        = nop,
 126         .sync           = nop,
 127         .incore         = nop,
 128         .lockop         = nop,
 129         .getprot        = nop,
 130         .getoffset      = nop,
 131         .gettype        = nop,
 132         .getvp          = nop,
 133         .advise         = nop,
 134         .setpagesize    = nop,
 135         .getmemid       = nop,


 313 {
 314 }
 315 
 316 #endif  /* SEGKPM_SUPPORT */
 317 
 318 /* ARGSUSED */
 319 static int
 320 segkpm_pagelock(struct seg *seg, caddr_t addr, size_t len,
 321         struct page ***page, enum lock_type type, enum seg_rw rw)
 322 {
 323         return (ENOTSUP);
 324 }
 325 
 326 /*
 327  * segkpm pages are not dumped, so we just return
 328  */
 329 /*ARGSUSED*/
 330 static void
 331 segkpm_dump(struct seg *seg)
 332 {
 333 }
 334 
 335 /*
 336  * We claim to have no special capabilities.
 337  */
 338 /*ARGSUSED*/
 339 static int
 340 segkpm_capable(struct seg *seg, segcapability_t capability)
 341 {
 342         return (0);
 343 }


  89  * segmap_kpm -- separate on/off switch for segmap using segkpm:
  90  * . Set by default.
  91  * . Will be disabled when kpm_enable is zero.
  92  * . Will be disabled when MAXBSIZE != PAGESIZE.
  93  * . Can be disabled via /etc/system.
  94  *
  95  */
  96 int kpm_enable = 1;
  97 int kpm_smallpages = 0;
  98 int segmap_kpm = 1;
  99 
 100 /*
 101  * Private seg op routines.
 102  */
 103 faultcode_t segkpm_fault(struct hat *hat, struct seg *seg, caddr_t addr,
 104                         size_t len, enum fault_type type, enum seg_rw rw);
 105 static void     segkpm_dump(struct seg *);
 106 static int      segkpm_pagelock(struct seg *seg, caddr_t addr, size_t len,
 107                         struct page ***page, enum lock_type type,
 108                         enum seg_rw rw);

 109 
 110 static struct seg_ops segkpm_ops = {
 111         .fault          = segkpm_fault,
 112         .dump           = segkpm_dump,
 113         .pagelock       = segkpm_pagelock,

 114 //#ifndef SEGKPM_SUPPORT
 115 #if 0
 116 #error FIXME: define nop
 117         .dup            = nop,
 118         .unmap          = nop,
 119         .free           = nop,
 120         .faulta         = nop,
 121         .setprot        = nop,
 122         .checkprot      = nop,
 123         .kluster        = nop,
 124         .sync           = nop,
 125         .incore         = nop,
 126         .lockop         = nop,
 127         .getprot        = nop,
 128         .getoffset      = nop,
 129         .gettype        = nop,
 130         .getvp          = nop,
 131         .advise         = nop,
 132         .setpagesize    = nop,
 133         .getmemid       = nop,


 311 {
 312 }
 313 
 314 #endif  /* SEGKPM_SUPPORT */
 315 
 316 /* ARGSUSED */
 317 static int
 318 segkpm_pagelock(struct seg *seg, caddr_t addr, size_t len,
 319         struct page ***page, enum lock_type type, enum seg_rw rw)
 320 {
 321         return (ENOTSUP);
 322 }
 323 
 324 /*
 325  * segkpm pages are not dumped, so we just return
 326  */
 327 /*ARGSUSED*/
 328 static void
 329 segkpm_dump(struct seg *seg)
 330 {










 331 }