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_kpm.c
          +++ new/usr/src/uts/common/vm/seg_kpm.c
↓ open down ↓ 95 lines elided ↑ open up ↑
  96   96  int kpm_enable = 1;
  97   97  int kpm_smallpages = 0;
  98   98  int segmap_kpm = 1;
  99   99  
 100  100  /*
 101  101   * Private seg op routines.
 102  102   */
 103  103  faultcode_t segkpm_fault(struct hat *hat, struct seg *seg, caddr_t addr,
 104  104                          size_t len, enum fault_type type, enum seg_rw rw);
 105  105  static void     segkpm_dump(struct seg *);
 106      -static void     segkpm_badop(void);
 107      -static int      segkpm_notsup(void);
      106 +static int      segkpm_pagelock(struct seg *seg, caddr_t addr, size_t len,
      107 +                        struct page ***page, enum lock_type type,
      108 +                        enum seg_rw rw);
 108  109  static int      segkpm_capable(struct seg *, segcapability_t);
 109  110  
 110      -#define SEGKPM_BADOP(t) (t(*)())segkpm_badop
 111      -#define SEGKPM_NOTSUP   (int(*)())segkpm_notsup
 112      -
 113  111  static struct seg_ops segkpm_ops = {
 114      -        .dup            = SEGKPM_BADOP(int),
 115      -        .unmap          = SEGKPM_BADOP(int),
 116      -        .free           = SEGKPM_BADOP(void),
 117  112          .fault          = segkpm_fault,
 118      -        .faulta         = SEGKPM_BADOP(int),
 119      -        .setprot        = SEGKPM_BADOP(int),
 120      -        .checkprot      = SEGKPM_BADOP(int),
 121      -        .kluster        = SEGKPM_BADOP(int),
 122      -        .sync           = SEGKPM_BADOP(int),
 123      -        .incore         = SEGKPM_BADOP(size_t),
 124      -        .lockop         = SEGKPM_BADOP(int),
 125      -        .getprot        = SEGKPM_BADOP(int),
 126      -        .getoffset      = SEGKPM_BADOP(u_offset_t),
 127      -        .gettype        = SEGKPM_BADOP(int),
 128      -        .getvp          = SEGKPM_BADOP(int),
 129      -        .advise         = SEGKPM_BADOP(int),
 130  113          .dump           = segkpm_dump,
 131      -        .pagelock       = SEGKPM_NOTSUP,
 132      -        .setpagesize    = SEGKPM_BADOP(int),
 133      -        .getmemid       = SEGKPM_BADOP(int),
 134      -        .getpolicy      = SEGKPM_BADOP(lgrp_mem_policy_info_t *),
      114 +        .pagelock       = segkpm_pagelock,
 135  115          .capable        = segkpm_capable,
 136  116          .inherit        = seg_inherit_notsup,
      117 +//#ifndef SEGKPM_SUPPORT
      118 +#if 0
      119 +#error FIXME: define nop
      120 +        .dup            = nop,
      121 +        .unmap          = nop,
      122 +        .free           = nop,
      123 +        .faulta         = nop,
      124 +        .setprot        = nop,
      125 +        .checkprot      = nop,
      126 +        .kluster        = nop,
      127 +        .sync           = nop,
      128 +        .incore         = nop,
      129 +        .lockop         = nop,
      130 +        .getprot        = nop,
      131 +        .getoffset      = nop,
      132 +        .gettype        = nop,
      133 +        .getvp          = nop,
      134 +        .advise         = nop,
      135 +        .setpagesize    = nop,
      136 +        .getmemid       = nop,
      137 +        .getpolicy      = nop,
      138 +#endif
 137  139  };
 138  140  
 139  141  /*
 140  142   * kpm_pgsz and kpm_pgshft are set by platform layer.
 141  143   */
 142  144  size_t          kpm_pgsz;       /* kpm page size */
 143  145  uint_t          kpm_pgshft;     /* kpm page shift */
 144  146  u_offset_t      kpm_pgoff;      /* kpm page offset mask */
 145  147  uint_t          kpmp2pshft;     /* kpm page to page shift */
 146  148  pgcnt_t         kpmpnpgs;       /* how many pages per kpm page */
↓ open down ↓ 129 lines elided ↑ open up ↑
 276  278          if (kpme->kpe_page == NULL) {
 277  279                  page_unlock(pp);
 278  280                  return;
 279  281          }
 280  282  
 281  283          vaddr = hat_kpm_page2va(pp, 1);
 282  284          hat_kpm_mapout(pp, kpme, vaddr);
 283  285          page_unlock(pp);
 284  286  }
 285  287  
 286      -static void
 287      -segkpm_badop()
 288      -{
 289      -        panic("segkpm_badop");
 290      -}
 291      -
 292  288  #else   /* SEGKPM_SUPPORT */
 293  289  
 294  290  /* segkpm stubs */
 295  291  
 296  292  /*ARGSUSED*/
 297      -int segkpm_create(struct seg *seg, void *argsp) { return (0); }
      293 +int segkpm_create(struct seg *seg, void *argsp)
      294 +{
      295 +        return (0);
      296 +}
 298  297  
 299  298  /* ARGSUSED */
 300  299  faultcode_t
 301  300  segkpm_fault(struct hat *hat, struct seg *seg, caddr_t addr, size_t len,
 302  301          enum fault_type type, enum seg_rw rw)
 303  302  {
 304      -        return ((faultcode_t)0);
      303 +        return (0);
 305  304  }
 306  305  
 307  306  /* ARGSUSED */
 308      -caddr_t segkpm_create_va(u_offset_t off) { return (NULL); }
      307 +caddr_t segkpm_create_va(u_offset_t off)
      308 +{
      309 +        return (NULL);
      310 +}
 309  311  
 310  312  /* ARGSUSED */
 311      -void segkpm_mapout_validkpme(struct kpme *kpme) {}
 312      -
 313      -static void
 314      -segkpm_badop() {}
      313 +void segkpm_mapout_validkpme(struct kpme *kpme)
      314 +{
      315 +}
 315  316  
 316  317  #endif  /* SEGKPM_SUPPORT */
 317  318  
      319 +/* ARGSUSED */
 318  320  static int
 319      -segkpm_notsup()
      321 +segkpm_pagelock(struct seg *seg, caddr_t addr, size_t len,
      322 +        struct page ***page, enum lock_type type, enum seg_rw rw)
 320  323  {
 321  324          return (ENOTSUP);
 322  325  }
 323  326  
 324  327  /*
 325  328   * segkpm pages are not dumped, so we just return
 326  329   */
 327  330  /*ARGSUSED*/
 328  331  static void
 329  332  segkpm_dump(struct seg *seg)
 330      -{}
      333 +{
      334 +}
 331  335  
 332  336  /*
 333  337   * We claim to have no special capabilities.
 334  338   */
 335  339  /*ARGSUSED*/
 336  340  static int
 337  341  segkpm_capable(struct seg *seg, segcapability_t capability)
 338  342  {
 339  343          return (0);
 340  344  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX