Print this page
use NULL dump segop as a shorthand for no-op
Instead of forcing every segment driver to implement a dummy function that
does nothing, handle NULL dump segop function pointer as a no-op 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 ↓ 64 lines elided ↑ open up ↑
  65   65  static int      segnf_setprot(struct seg *seg, caddr_t addr,
  66   66                      size_t len, uint_t prot);
  67   67  static int      segnf_checkprot(struct seg *seg, caddr_t addr,
  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      -static void     segnf_dump(struct seg *seg);
  76   75  static int      segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
  77   76                      struct page ***ppp, enum lock_type type, enum seg_rw rw);
  78   77  
  79   78  
  80   79  const struct seg_ops segnf_ops = {
  81   80          .dup            = segnf_dup,
  82   81          .unmap          = segnf_unmap,
  83   82          .free           = segnf_free,
  84   83          .fault          = (faultcode_t (*)(struct hat *, struct seg *, caddr_t,
  85   84              size_t, enum fault_type, enum seg_rw))segnf_nomap,
↓ open down ↓ 5 lines elided ↑ open up ↑
  91   90          .incore         = (size_t (*)(struct seg *, caddr_t, size_t, char *))
  92   91                  segnf_nop,
  93   92          .lockop         = (int (*)(struct seg *, caddr_t, size_t, int, int,
  94   93              ulong_t *, size_t))segnf_nop,
  95   94          .getprot        = segnf_getprot,
  96   95          .getoffset      = segnf_getoffset,
  97   96          .gettype        = segnf_gettype,
  98   97          .getvp          = segnf_getvp,
  99   98          .advise         = (int (*)(struct seg *, caddr_t, size_t, uint_t))
 100   99                  segnf_nop,
 101      -        .dump           = segnf_dump,
 102  100          .pagelock       = segnf_pagelock,
 103  101  };
 104  102  
 105  103  /*
 106  104   * vnode and page for the page of zeros we use for the nf mappings.
 107  105   */
 108  106  static kmutex_t segnf_lock;
 109  107  static struct vnode nfvp;
 110  108  static struct page **nfpp;
 111  109  
↓ open down ↓ 317 lines elided ↑ open up ↑
 429  427  
 430  428  /* ARGSUSED */
 431  429  static int
 432  430  segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp)
 433  431  {
 434  432          ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
 435  433  
 436  434          *vpp = &nfvp;
 437  435          return (0);
 438  436  }
 439      -
 440      -/*
 441      - * segnf pages are not dumped, so we just return
 442      - */
 443      -/* ARGSUSED */
 444      -static void
 445      -segnf_dump(struct seg *seg)
 446      -{}
 447  437  
 448  438  /*ARGSUSED*/
 449  439  static int
 450  440  segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
 451  441      struct page ***ppp, enum lock_type type, enum seg_rw rw)
 452  442  {
 453  443          return (ENOTSUP);
 454  444  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX