Print this page
segop_getpolicy already checks for a NULL op


  61 static int      segnf_dup(struct seg *seg, struct seg *newseg);
  62 static int      segnf_unmap(struct seg *seg, caddr_t addr, size_t len);
  63 static void     segnf_free(struct seg *seg);
  64 static faultcode_t segnf_nomap(void);
  65 static int      segnf_setprot(struct seg *seg, caddr_t addr,
  66                     size_t len, uint_t prot);
  67 static int      segnf_checkprot(struct seg *seg, caddr_t addr,
  68                     size_t len, uint_t prot);
  69 static int      segnf_nop(void);
  70 static int      segnf_getprot(struct seg *seg, caddr_t addr,
  71                     size_t len, uint_t *protv);
  72 static u_offset_t segnf_getoffset(struct seg *seg, caddr_t addr);
  73 static int      segnf_gettype(struct seg *seg, caddr_t addr);
  74 static int      segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
  75 static void     segnf_dump(struct seg *seg);
  76 static int      segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
  77                     struct page ***ppp, enum lock_type type, enum seg_rw rw);
  78 static int      segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
  79                     uint_t szc);
  80 static int      segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
  81 static lgrp_mem_policy_info_t   *segnf_getpolicy(struct seg *seg,
  82     caddr_t addr);
  83 
  84 
  85 struct seg_ops segnf_ops = {
  86         .dup            = segnf_dup,
  87         .unmap          = segnf_unmap,
  88         .free           = segnf_free,
  89         .fault          = (faultcode_t (*)(struct hat *, struct seg *, caddr_t,
  90             size_t, enum fault_type, enum seg_rw))segnf_nomap,
  91         .faulta         = (faultcode_t (*)(struct seg *, caddr_t)) segnf_nomap,
  92         .setprot        = segnf_setprot,
  93         .checkprot      = segnf_checkprot,
  94         .sync           = (int (*)(struct seg *, caddr_t, size_t, int, uint_t))
  95                 segnf_nop,
  96         .incore         = (size_t (*)(struct seg *, caddr_t, size_t, char *))
  97                 segnf_nop,
  98         .lockop         = (int (*)(struct seg *, caddr_t, size_t, int, int,
  99             ulong_t *, size_t))segnf_nop,
 100         .getprot        = segnf_getprot,
 101         .getoffset      = segnf_getoffset,
 102         .gettype        = segnf_gettype,
 103         .getvp          = segnf_getvp,
 104         .advise         = (int (*)(struct seg *, caddr_t, size_t, uint_t))
 105                 segnf_nop,
 106         .dump           = segnf_dump,
 107         .pagelock       = segnf_pagelock,
 108         .setpagesize    = segnf_setpagesize,
 109         .getmemid       = segnf_getmemid,
 110         .getpolicy      = segnf_getpolicy,
 111 };
 112 
 113 /*
 114  * vnode and page for the page of zeros we use for the nf mappings.
 115  */
 116 static kmutex_t segnf_lock;
 117 static struct vnode nfvp;
 118 static struct page **nfpp;
 119 
 120 #define addr_to_vcolor(addr)                                            \
 121         (shm_alignment) ?                                               \
 122         ((int)(((uintptr_t)(addr) & (shm_alignment - 1)) >> PAGESHIFT)) : 0
 123 
 124 /*
 125  * We try to limit the number of Non-fault segments created.
 126  * Non fault segments are created to optimize sparc V9 code which uses
 127  * the sparc nonfaulting load ASI (ASI_PRIMARY_NOFAULT).
 128  *
 129  * There are several reasons why creating too many non-fault segments
 130  * could cause problems.


 457 static int
 458 segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
 459     struct page ***ppp, enum lock_type type, enum seg_rw rw)
 460 {
 461         return (ENOTSUP);
 462 }
 463 
 464 /*ARGSUSED*/
 465 static int
 466 segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
 467     uint_t szc)
 468 {
 469         return (ENOTSUP);
 470 }
 471 
 472 /*ARGSUSED*/
 473 static int
 474 segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
 475 {
 476         return (ENODEV);
 477 }
 478 
 479 /*ARGSUSED*/
 480 static lgrp_mem_policy_info_t *
 481 segnf_getpolicy(struct seg *seg, caddr_t addr)
 482 {
 483         return (NULL);
 484 }


  61 static int      segnf_dup(struct seg *seg, struct seg *newseg);
  62 static int      segnf_unmap(struct seg *seg, caddr_t addr, size_t len);
  63 static void     segnf_free(struct seg *seg);
  64 static faultcode_t segnf_nomap(void);
  65 static int      segnf_setprot(struct seg *seg, caddr_t addr,
  66                     size_t len, uint_t prot);
  67 static int      segnf_checkprot(struct seg *seg, caddr_t addr,
  68                     size_t len, uint_t prot);
  69 static int      segnf_nop(void);
  70 static int      segnf_getprot(struct seg *seg, caddr_t addr,
  71                     size_t len, uint_t *protv);
  72 static u_offset_t segnf_getoffset(struct seg *seg, caddr_t addr);
  73 static int      segnf_gettype(struct seg *seg, caddr_t addr);
  74 static int      segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
  75 static void     segnf_dump(struct seg *seg);
  76 static int      segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
  77                     struct page ***ppp, enum lock_type type, enum seg_rw rw);
  78 static int      segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
  79                     uint_t szc);
  80 static int      segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);


  81 
  82 
  83 struct seg_ops segnf_ops = {
  84         .dup            = segnf_dup,
  85         .unmap          = segnf_unmap,
  86         .free           = segnf_free,
  87         .fault          = (faultcode_t (*)(struct hat *, struct seg *, caddr_t,
  88             size_t, enum fault_type, enum seg_rw))segnf_nomap,
  89         .faulta         = (faultcode_t (*)(struct seg *, caddr_t)) segnf_nomap,
  90         .setprot        = segnf_setprot,
  91         .checkprot      = segnf_checkprot,
  92         .sync           = (int (*)(struct seg *, caddr_t, size_t, int, uint_t))
  93                 segnf_nop,
  94         .incore         = (size_t (*)(struct seg *, caddr_t, size_t, char *))
  95                 segnf_nop,
  96         .lockop         = (int (*)(struct seg *, caddr_t, size_t, int, int,
  97             ulong_t *, size_t))segnf_nop,
  98         .getprot        = segnf_getprot,
  99         .getoffset      = segnf_getoffset,
 100         .gettype        = segnf_gettype,
 101         .getvp          = segnf_getvp,
 102         .advise         = (int (*)(struct seg *, caddr_t, size_t, uint_t))
 103                 segnf_nop,
 104         .dump           = segnf_dump,
 105         .pagelock       = segnf_pagelock,
 106         .setpagesize    = segnf_setpagesize,
 107         .getmemid       = segnf_getmemid,

 108 };
 109 
 110 /*
 111  * vnode and page for the page of zeros we use for the nf mappings.
 112  */
 113 static kmutex_t segnf_lock;
 114 static struct vnode nfvp;
 115 static struct page **nfpp;
 116 
 117 #define addr_to_vcolor(addr)                                            \
 118         (shm_alignment) ?                                               \
 119         ((int)(((uintptr_t)(addr) & (shm_alignment - 1)) >> PAGESHIFT)) : 0
 120 
 121 /*
 122  * We try to limit the number of Non-fault segments created.
 123  * Non fault segments are created to optimize sparc V9 code which uses
 124  * the sparc nonfaulting load ASI (ASI_PRIMARY_NOFAULT).
 125  *
 126  * There are several reasons why creating too many non-fault segments
 127  * could cause problems.


 454 static int
 455 segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
 456     struct page ***ppp, enum lock_type type, enum seg_rw rw)
 457 {
 458         return (ENOTSUP);
 459 }
 460 
 461 /*ARGSUSED*/
 462 static int
 463 segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
 464     uint_t szc)
 465 {
 466         return (ENOTSUP);
 467 }
 468 
 469 /*ARGSUSED*/
 470 static int
 471 segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
 472 {
 473         return (ENODEV);







 474 }