Print this page
no need for bad-op segment op functions
The segment drivers have a number of bad-op functions that simply panic.
Keeping the function pointer NULL will accomplish the same thing in most
cases.  In other cases, keeping the function pointer NULL will result in
proper error code being returned.

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 ↓ 58 lines elided ↑ open up ↑
  59   59   * Private seg op routines.
  60   60   */
  61   61  static int      segnf_dup(struct seg *seg, struct seg *newseg);
  62   62  static int      segnf_unmap(struct seg *seg, caddr_t addr, size_t len);
  63   63  static void     segnf_free(struct seg *seg);
  64   64  static faultcode_t segnf_nomap(void);
  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      -static void     segnf_badop(void);
  70   69  static int      segnf_nop(void);
  71   70  static int      segnf_getprot(struct seg *seg, caddr_t addr,
  72   71                      size_t len, uint_t *protv);
  73   72  static u_offset_t segnf_getoffset(struct seg *seg, caddr_t addr);
  74   73  static int      segnf_gettype(struct seg *seg, caddr_t addr);
  75   74  static int      segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
  76   75  static void     segnf_dump(struct seg *seg);
  77   76  static int      segnf_pagelock(struct seg *seg, caddr_t addr, size_t len,
  78   77                      struct page ***ppp, enum lock_type type, enum seg_rw rw);
  79   78  static int      segnf_setpagesize(struct seg *seg, caddr_t addr, size_t len,
↓ open down ↓ 5 lines elided ↑ open up ↑
  85   84  
  86   85  struct seg_ops segnf_ops = {
  87   86          .dup            = segnf_dup,
  88   87          .unmap          = segnf_unmap,
  89   88          .free           = segnf_free,
  90   89          .fault          = (faultcode_t (*)(struct hat *, struct seg *, caddr_t,
  91   90              size_t, enum fault_type, enum seg_rw))segnf_nomap,
  92   91          .faulta         = (faultcode_t (*)(struct seg *, caddr_t)) segnf_nomap,
  93   92          .setprot        = segnf_setprot,
  94   93          .checkprot      = segnf_checkprot,
  95      -        .kluster        = (int (*)())segnf_badop,
  96   94          .sync           = (int (*)(struct seg *, caddr_t, size_t, int, uint_t))
  97   95                  segnf_nop,
  98   96          .incore         = (size_t (*)(struct seg *, caddr_t, size_t, char *))
  99   97                  segnf_nop,
 100   98          .lockop         = (int (*)(struct seg *, caddr_t, size_t, int, int,
 101   99              ulong_t *, size_t))segnf_nop,
 102  100          .getprot        = segnf_getprot,
 103  101          .getoffset      = segnf_getoffset,
 104  102          .gettype        = segnf_gettype,
 105  103          .getvp          = segnf_getvp,
↓ open down ↓ 286 lines elided ↑ open up ↑
 392  390  
 393  391  /* ARGSUSED */
 394  392  static int
 395  393  segnf_checkprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
 396  394  {
 397  395          uint_t sprot;
 398  396          ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
 399  397  
 400  398          sprot = seg->s_as == &kas ?  PROT_READ : PROT_READ|PROT_USER;
 401  399          return ((prot & sprot) == prot ? 0 : EACCES);
 402      -}
 403      -
 404      -static void
 405      -segnf_badop(void)
 406      -{
 407      -        panic("segnf_badop");
 408      -        /*NOTREACHED*/
 409  400  }
 410  401  
 411  402  static int
 412  403  segnf_nop(void)
 413  404  {
 414  405          return (0);
 415  406  }
 416  407  
 417  408  static int
 418  409  segnf_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv)
↓ open down ↓ 75 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX