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_map.c
          +++ new/usr/src/uts/common/vm/seg_map.c
↓ open down ↓ 79 lines elided ↑ open up ↑
  80   80  static int      segmap_kluster(struct seg *seg, caddr_t addr, ssize_t);
  81   81  static int      segmap_getprot(struct seg *seg, caddr_t addr, size_t len,
  82   82                          uint_t *protv);
  83   83  static u_offset_t       segmap_getoffset(struct seg *seg, caddr_t addr);
  84   84  static int      segmap_gettype(struct seg *seg, caddr_t addr);
  85   85  static int      segmap_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp);
  86   86  static void     segmap_dump(struct seg *seg);
  87   87  static int      segmap_pagelock(struct seg *seg, caddr_t addr, size_t len,
  88   88                          struct page ***ppp, enum lock_type type,
  89   89                          enum seg_rw rw);
  90      -static void     segmap_badop(void);
  91   90  static int      segmap_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp);
  92   91  static lgrp_mem_policy_info_t   *segmap_getpolicy(struct seg *seg,
  93   92      caddr_t addr);
  94   93  static int      segmap_capable(struct seg *seg, segcapability_t capability);
  95   94  
  96   95  /* segkpm support */
  97   96  static caddr_t  segmap_pagecreate_kpm(struct seg *, vnode_t *, u_offset_t,
  98   97                          struct smap *, enum seg_rw);
  99   98  struct smap     *get_smap_kpm(caddr_t, page_t **);
 100   99  
 101      -#define SEGMAP_BADOP(t) (t(*)())segmap_badop
 102      -
 103  100  static struct seg_ops segmap_ops = {
 104      -        .dup            = SEGMAP_BADOP(int),
 105      -        .unmap          = SEGMAP_BADOP(int),
 106  101          .free           = segmap_free,
 107  102          .fault          = segmap_fault,
 108  103          .faulta         = segmap_faulta,
 109      -        .setprot        = SEGMAP_BADOP(int),
 110  104          .checkprot      = segmap_checkprot,
 111  105          .kluster        = segmap_kluster,
 112      -        .sync           = SEGMAP_BADOP(int),
 113      -        .incore         = SEGMAP_BADOP(size_t),
 114      -        .lockop         = SEGMAP_BADOP(int),
 115  106          .getprot        = segmap_getprot,
 116  107          .getoffset      = segmap_getoffset,
 117  108          .gettype        = segmap_gettype,
 118  109          .getvp          = segmap_getvp,
 119      -        .advise         = SEGMAP_BADOP(int),
 120  110          .dump           = segmap_dump,
 121  111          .pagelock       = segmap_pagelock,
 122      -        .setpagesize    = SEGMAP_BADOP(int),
 123  112          .getmemid       = segmap_getmemid,
 124  113          .getpolicy      = segmap_getpolicy,
 125  114          .capable        = segmap_capable,
 126  115          .inherit        = seg_inherit_notsup,
 127  116  };
 128  117  
 129  118  /*
 130  119   * Private segmap routines.
 131  120   */
 132  121  static void     segmap_unlock(struct hat *hat, struct seg *seg, caddr_t addr,
↓ open down ↓ 766 lines elided ↑ open up ↑
 899  888   * addr + delta relative to the mapping at addr.  We assume here
 900  889   * that delta is a signed PAGESIZE'd multiple (which can be negative).
 901  890   *
 902  891   * For segmap we always "approve" of this action from our standpoint.
 903  892   */
 904  893  /*ARGSUSED*/
 905  894  static int
 906  895  segmap_kluster(struct seg *seg, caddr_t addr, ssize_t delta)
 907  896  {
 908  897          return (0);
 909      -}
 910      -
 911      -static void
 912      -segmap_badop()
 913      -{
 914      -        panic("segmap_badop");
 915      -        /*NOTREACHED*/
 916  898  }
 917  899  
 918  900  /*
 919  901   * Special private segmap operations
 920  902   */
 921  903  
 922  904  /*
 923  905   * Add smap to the appropriate free list.
 924  906   */
 925  907  static void
↓ open down ↓ 1429 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX