Print this page
use NULL setpagesize segop as a shorthand for ENOTSUP
Instead of forcing every segment driver to implement a dummp function to
return (hopefully) ENOTSUP, handle NULL setpagesize segop function pointer
as "return ENOTSUP" shorthand.

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/sparc/v9/vm/seg_nf.c
          +++ new/usr/src/uts/sparc/v9/vm/seg_nf.c
↓ open down ↓ 67 lines elided ↑ open up ↑
  68   68                      size_t len, uint_t prot);
  69   69  static int      segnf_nop(void);
  70   70  static int      segnf_getprot(struct seg *seg, caddr_t addr,
  71   71                      size_t len, uint_t *protv);
  72   72  static u_offset_t segnf_getoffset(struct seg *seg, caddr_t addr);
  73   73  static int      segnf_gettype(struct seg *seg, caddr_t addr);
  74   74  static int      segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
  75   75  static void     segnf_dump(struct seg *seg);
  76   76  static int      segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
  77   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   78  
  81   79  
  82   80  struct seg_ops segnf_ops = {
  83   81          .dup            = segnf_dup,
  84   82          .unmap          = segnf_unmap,
  85   83          .free           = segnf_free,
  86   84          .fault          = (faultcode_t (*)(struct hat *, struct seg *, caddr_t,
  87   85              size_t, enum fault_type, enum seg_rw))segnf_nomap,
  88   86          .faulta         = (faultcode_t (*)(struct seg *, caddr_t)) segnf_nomap,
  89   87          .setprot        = segnf_setprot,
↓ open down ↓ 5 lines elided ↑ open up ↑
  95   93          .lockop         = (int (*)(struct seg *, caddr_t, size_t, int, int,
  96   94              ulong_t *, size_t))segnf_nop,
  97   95          .getprot        = segnf_getprot,
  98   96          .getoffset      = segnf_getoffset,
  99   97          .gettype        = segnf_gettype,
 100   98          .getvp          = segnf_getvp,
 101   99          .advise         = (int (*)(struct seg *, caddr_t, size_t, uint_t))
 102  100                  segnf_nop,
 103  101          .dump           = segnf_dump,
 104  102          .pagelock       = segnf_pagelock,
 105      -        .setpagesize    = segnf_setpagesize,
 106  103  };
 107  104  
 108  105  /*
 109  106   * vnode and page for the page of zeros we use for the nf mappings.
 110  107   */
 111  108  static kmutex_t segnf_lock;
 112  109  static struct vnode nfvp;
 113  110  static struct page **nfpp;
 114  111  
 115  112  #define addr_to_vcolor(addr)                                            \
↓ open down ↓ 329 lines elided ↑ open up ↑
 445  442   */
 446  443  /* ARGSUSED */
 447  444  static void
 448  445  segnf_dump(struct seg *seg)
 449  446  {}
 450  447  
 451  448  /*ARGSUSED*/
 452  449  static int
 453  450  segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
 454  451      struct page ***ppp, enum lock_type type, enum seg_rw rw)
 455      -{
 456      -        return (ENOTSUP);
 457      -}
 458      -
 459      -/*ARGSUSED*/
 460      -static int
 461      -segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
 462      -    uint_t szc)
 463  452  {
 464  453          return (ENOTSUP);
 465  454  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX