Print this page
use NULL getmemid segop as a shorthand for ENODEV
Instead of forcing every segment driver to implement a dummy function to
return (hopefully) ENODEV, handle NULL getmemid segop function pointer as
"return ENODEV" 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 ↓ 69 lines elided ↑ open up ↑
  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   78  static int      segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
  79   79                      uint_t szc);
  80      -static int      segnf_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
  81   80  
  82   81  
  83   82  struct seg_ops segnf_ops = {
  84   83          .dup            = segnf_dup,
  85   84          .unmap          = segnf_unmap,
  86   85          .free           = segnf_free,
  87   86          .fault          = (faultcode_t (*)(struct hat *, struct seg *, caddr_t,
  88   87              size_t, enum fault_type, enum seg_rw))segnf_nomap,
  89   88          .faulta         = (faultcode_t (*)(struct seg *, caddr_t)) segnf_nomap,
  90   89          .setprot        = segnf_setprot,
↓ open down ↓ 6 lines elided ↑ open up ↑
  97   96              ulong_t *, size_t))segnf_nop,
  98   97          .getprot        = segnf_getprot,
  99   98          .getoffset      = segnf_getoffset,
 100   99          .gettype        = segnf_gettype,
 101  100          .getvp          = segnf_getvp,
 102  101          .advise         = (int (*)(struct seg *, caddr_t, size_t, uint_t))
 103  102                  segnf_nop,
 104  103          .dump           = segnf_dump,
 105  104          .pagelock       = segnf_pagelock,
 106  105          .setpagesize    = segnf_setpagesize,
 107      -        .getmemid       = segnf_getmemid,
 108  106  };
 109  107  
 110  108  /*
 111  109   * vnode and page for the page of zeros we use for the nf mappings.
 112  110   */
 113  111  static kmutex_t segnf_lock;
 114  112  static struct vnode nfvp;
 115  113  static struct page **nfpp;
 116  114  
 117  115  #define addr_to_vcolor(addr)                                            \
↓ open down ↓ 339 lines elided ↑ open up ↑
 457  455  {
 458  456          return (ENOTSUP);
 459  457  }
 460  458  
 461  459  /*ARGSUSED*/
 462  460  static int
 463  461  segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
 464  462      uint_t szc)
 465  463  {
 466  464          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  465  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX