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/common/vm/seg_kp.c
          +++ new/usr/src/uts/common/vm/seg_kp.c
↓ open down ↓ 67 lines elided ↑ open up ↑
  68   68  #include <vm/seg_kp.h>
  69   69  #include <vm/seg_kmem.h>
  70   70  #include <vm/anon.h>
  71   71  #include <vm/page.h>
  72   72  #include <vm/hat.h>
  73   73  #include <sys/bitmap.h>
  74   74  
  75   75  /*
  76   76   * Private seg op routines
  77   77   */
  78      -static void     segkp_badop(void);
  79   78  static void     segkp_dump(struct seg *seg);
  80   79  static int      segkp_checkprot(struct seg *seg, caddr_t addr, size_t len,
  81   80                          uint_t prot);
  82   81  static int      segkp_kluster(struct seg *seg, caddr_t addr, ssize_t delta);
  83   82  static int      segkp_pagelock(struct seg *seg, caddr_t addr, size_t len,
  84   83                          struct page ***page, enum lock_type type,
  85   84                          enum seg_rw rw);
  86   85  static void     segkp_insert(struct seg *seg, struct segkp_data *kpd);
  87   86  static void     segkp_delete(struct seg *seg, struct segkp_data *kpd);
  88   87  static caddr_t  segkp_get_internal(struct seg *seg, size_t len, uint_t flags,
↓ open down ↓ 13 lines elided ↑ open up ↑
 102  101  /*
 103  102   * Lock used to protect the hash table(s) and caches.
 104  103   */
 105  104  static kmutex_t segkp_lock;
 106  105  
 107  106  /*
 108  107   * The segkp caches
 109  108   */
 110  109  static struct segkp_cache segkp_cache[SEGKP_MAX_CACHE];
 111  110  
 112      -#define SEGKP_BADOP(t)  (t(*)())segkp_badop
 113      -
 114  111  /*
 115  112   * When there are fewer than red_minavail bytes left on the stack,
 116  113   * segkp_map_red() will map in the redzone (if called).  5000 seems
 117  114   * to work reasonably well...
 118  115   */
 119  116  long            red_minavail = 5000;
 120  117  
 121  118  /*
 122  119   * will be set to 1 for 32 bit x86 systems only, in startup.c
 123  120   */
↓ open down ↓ 15 lines elided ↑ open up ↑
 139  136  kthread_t       *red_deep_thread;
 140  137  
 141  138  uint32_t        red_nmapped;
 142  139  uint32_t        red_closest = UINT_MAX;
 143  140  uint32_t        red_ndoubles;
 144  141  
 145  142  pgcnt_t anon_segkp_pages_locked;        /* See vm/anon.h */
 146  143  pgcnt_t anon_segkp_pages_resv;          /* anon reserved by seg_kp */
 147  144  
 148  145  static struct   seg_ops segkp_ops = {
 149      -        .dup            = SEGKP_BADOP(int),
 150      -        .unmap          = SEGKP_BADOP(int),
 151      -        .free           = SEGKP_BADOP(void),
 152  146          .fault          = segkp_fault,
 153      -        .faulta         = SEGKP_BADOP(faultcode_t),
 154      -        .setprot        = SEGKP_BADOP(int),
 155  147          .checkprot      = segkp_checkprot,
 156  148          .kluster        = segkp_kluster,
 157      -        .sync           = SEGKP_BADOP(int),
 158      -        .incore         = SEGKP_BADOP(size_t),
 159      -        .lockop         = SEGKP_BADOP(int),
 160      -        .getprot        = SEGKP_BADOP(int),
 161      -        .getoffset      = SEGKP_BADOP(u_offset_t),
 162      -        .gettype        = SEGKP_BADOP(int),
 163      -        .getvp          = SEGKP_BADOP(int),
 164      -        .advise         = SEGKP_BADOP(int),
 165  149          .dump           = segkp_dump,
 166  150          .pagelock       = segkp_pagelock,
 167      -        .setpagesize    = SEGKP_BADOP(int),
 168  151          .getmemid       = segkp_getmemid,
 169  152          .getpolicy      = segkp_getpolicy,
 170  153          .capable        = segkp_capable,
 171  154          .inherit        = seg_inherit_notsup,
 172  155  };
 173  156  
 174      -
 175      -static void
 176      -segkp_badop(void)
 177      -{
 178      -        panic("segkp_badop");
 179      -        /*NOTREACHED*/
 180      -}
 181  157  
 182  158  static void segkpinit_mem_config(struct seg *);
 183  159  
 184  160  static uint32_t segkp_indel;
 185  161  
 186  162  /*
 187  163   * Allocate the segment specific private data struct and fill it in
 188  164   * with the per kp segment mutex, anon ptr. array and hash table.
 189  165   */
 190  166  int
↓ open down ↓ 1268 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX