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_kmem.c
          +++ new/usr/src/uts/common/vm/seg_kmem.c
↓ open down ↓ 420 lines elided ↑ open up ↑
 421  421          if (bop_alloc_chunk(addr, size, align) != (caddr_t)addr)
 422  422                  panic("boot_alloc: bop_alloc_chunk failed");
 423  423  #else
 424  424          if (BOP_ALLOC(bootops, addr, size, align) != addr)
 425  425                  panic("boot_alloc: BOP_ALLOC failed");
 426  426  #endif
 427  427          boot_mapin((caddr_t)addr, size);
 428  428          return (addr);
 429  429  }
 430  430  
 431      -static void
 432      -segkmem_badop()
 433      -{
 434      -        panic("segkmem_badop");
 435      -}
 436      -
 437      -#define SEGKMEM_BADOP(t)        (t(*)())segkmem_badop
 438      -
 439  431  /*ARGSUSED*/
 440  432  static faultcode_t
 441  433  segkmem_fault(struct hat *hat, struct seg *seg, caddr_t addr, size_t size,
 442  434          enum fault_type type, enum seg_rw rw)
 443  435  {
 444  436          pgcnt_t npages;
 445  437          spgcnt_t pg;
 446  438          page_t *pp;
 447  439          struct vnode *vp = seg->s_data;
 448  440  
↓ open down ↓ 83 lines elided ↑ open up ↑
 532  524   * This is a dummy segkmem function overloaded to call segkp
 533  525   * when segkp is under the heap.
 534  526   */
 535  527  /* ARGSUSED */
 536  528  static int
 537  529  segkmem_checkprot(struct seg *seg, caddr_t addr, size_t size, uint_t prot)
 538  530  {
 539  531          ASSERT(RW_LOCK_HELD(&seg->s_as->a_lock));
 540  532  
 541  533          if (seg->s_as != &kas)
 542      -                segkmem_badop();
      534 +                panic("segkmem badop");
 543  535  
 544  536          /*
 545  537           * If it is one of segkp pages, call into segkp.
 546  538           */
 547  539          if (segkp_bitmap && seg == &kvseg &&
 548  540              BT_TEST(segkp_bitmap, btop((uintptr_t)(addr - seg->s_base))))
 549  541                  return (segop_checkprot(segkp, addr, size, prot));
 550  542  
 551      -        segkmem_badop();
      543 +        panic("segkmem badop");
 552  544          return (0);
 553  545  }
 554  546  
 555  547  /*
 556  548   * This is a dummy segkmem function overloaded to call segkp
 557  549   * when segkp is under the heap.
 558  550   */
 559  551  /* ARGSUSED */
 560  552  static int
 561  553  segkmem_kluster(struct seg *seg, caddr_t addr, ssize_t delta)
 562  554  {
 563  555          ASSERT(RW_LOCK_HELD(&seg->s_as->a_lock));
 564  556  
 565  557          if (seg->s_as != &kas)
 566      -                segkmem_badop();
      558 +                panic("segkmem badop");
 567  559  
 568  560          /*
 569  561           * If it is one of segkp pages, call into segkp.
 570  562           */
 571  563          if (segkp_bitmap && seg == &kvseg &&
 572  564              BT_TEST(segkp_bitmap, btop((uintptr_t)(addr - seg->s_base))))
 573  565                  return (segop_kluster(segkp, addr, delta));
 574  566  
 575      -        segkmem_badop();
      567 +        panic("segkmem badop");
 576  568          return (0);
 577  569  }
 578  570  
 579  571  static void
 580  572  segkmem_xdump_range(void *arg, void *start, size_t size)
 581  573  {
 582  574          struct as *as = arg;
 583  575          caddr_t addr = start;
 584  576          caddr_t addr_end = addr + size;
 585  577  
↓ open down ↓ 151 lines elided ↑ open up ↑
 737  729   * This is a dummy segkmem function overloaded to call segkp
 738  730   * when segkp is under the heap.
 739  731   */
 740  732  /* ARGSUSED */
 741  733  static int
 742  734  segkmem_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
 743  735  {
 744  736          ASSERT(RW_LOCK_HELD(&seg->s_as->a_lock));
 745  737  
 746  738          if (seg->s_as != &kas)
 747      -                segkmem_badop();
      739 +                panic("segkmem badop");
 748  740  
 749  741          /*
 750  742           * If it is one of segkp pages, call into segkp.
 751  743           */
 752  744          if (segkp_bitmap && seg == &kvseg &&
 753  745              BT_TEST(segkp_bitmap, btop((uintptr_t)(addr - seg->s_base))))
 754  746                  return (segop_getmemid(segkp, addr, memidp));
 755  747  
 756      -        segkmem_badop();
      748 +        panic("segkmem badop");
 757  749          return (0);
 758  750  }
 759  751  
 760  752  /*ARGSUSED*/
 761  753  static lgrp_mem_policy_info_t *
 762  754  segkmem_getpolicy(struct seg *seg, caddr_t addr)
 763  755  {
 764  756          return (NULL);
 765  757  }
 766  758  
 767  759  /*ARGSUSED*/
 768  760  static int
 769  761  segkmem_capable(struct seg *seg, segcapability_t capability)
 770  762  {
 771  763          if (capability == S_CAPABILITY_NOMINFLT)
 772  764                  return (1);
 773  765          return (0);
 774  766  }
 775  767  
 776  768  static struct seg_ops segkmem_ops = {
 777      -        .dup            = SEGKMEM_BADOP(int),
 778      -        .unmap          = SEGKMEM_BADOP(int),
 779      -        .free           = SEGKMEM_BADOP(void),
 780  769          .fault          = segkmem_fault,
 781      -        .faulta         = SEGKMEM_BADOP(faultcode_t),
 782  770          .setprot        = segkmem_setprot,
 783  771          .checkprot      = segkmem_checkprot,
 784  772          .kluster        = segkmem_kluster,
 785      -        .sync           = SEGKMEM_BADOP(int),
 786      -        .incore         = SEGKMEM_BADOP(size_t),
 787      -        .lockop         = SEGKMEM_BADOP(int),
 788      -        .getprot        = SEGKMEM_BADOP(int),
 789      -        .getoffset      = SEGKMEM_BADOP(u_offset_t),
 790      -        .gettype        = SEGKMEM_BADOP(int),
 791      -        .getvp          = SEGKMEM_BADOP(int),
 792      -        .advise         = SEGKMEM_BADOP(int),
 793  773          .dump           = segkmem_dump,
 794  774          .pagelock       = segkmem_pagelock,
 795      -        .setpagesize    = SEGKMEM_BADOP(int),
 796  775          .getmemid       = segkmem_getmemid,
 797  776          .getpolicy      = segkmem_getpolicy,
 798  777          .capable        = segkmem_capable,
 799  778          .inherit        = seg_inherit_notsup,
 800  779  };
 801  780  
 802  781  int
 803  782  segkmem_zio_create(struct seg *seg)
 804  783  {
 805  784          ASSERT(seg->s_as == &kas && RW_WRITE_HELD(&kas.a_lock));
↓ open down ↓ 838 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX