Print this page
    
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.com>
    
      
        | Split | 
	Close | 
      
      | Expand all | 
      | Collapse all | 
    
    
          --- old/usr/src/uts/common/vm/seg_kmem.h
          +++ new/usr/src/uts/common/vm/seg_kmem.h
   1    1  /*
   2    2   * CDDL HEADER START
   3    3   *
   4    4   * The contents of this file are subject to the terms of the
   5    5   * Common Development and Distribution License (the "License").
   6    6   * You may not use this file except in compliance with the License.
   7    7   *
   8    8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9    9   * or http://www.opensolaris.org/os/licensing.
  10   10   * See the License for the specific language governing permissions
  11   11   * and limitations under the License.
  12   12   *
  13   13   * When distributing Covered Code, include this CDDL HEADER in each
  
    | 
      ↓ open down ↓ | 
    13 lines elided | 
    
      ↑ open up ↑ | 
  
  14   14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
       24 + * Copyright 2016 Joyent, Inc.
  24   25   */
  25   26  
  26   27  #ifndef _VM_SEG_KMEM_H
  27   28  #define _VM_SEG_KMEM_H
  28   29  
  29   30  
  30   31  #ifdef  __cplusplus
  31   32  extern "C" {
  32   33  #endif
  33   34  
  34   35  #include <sys/types.h>
  35   36  #include <sys/vnode.h>
  36   37  #include <sys/vmem.h>
  37   38  #include <vm/as.h>
  38   39  #include <vm/seg.h>
  39   40  #include <vm/page.h>
  40   41  
  41   42  /*
  42   43   * VM - Kernel Segment Driver
  43   44   */
  44   45  
  45   46  #if defined(_KERNEL)
  46   47  
  47   48  extern char *kernelheap;        /* start of primary kernel heap */
  48   49  extern char *ekernelheap;       /* end of primary kernel heap */
  49   50  extern char *heap_lp_base;      /* start of kernel large page heap arena */
  50   51  extern char *heap_lp_end;       /* end of kernel large page heap arena */
  51   52  extern struct seg kvseg;        /* primary kernel heap segment */
  52   53  extern struct seg kvseg_core;   /* "core" kernel heap segment */
  53   54  extern struct seg kzioseg;      /* Segment for zio mappings */
  54   55  extern vmem_t *heap_lp_arena;   /* kernel large page heap arena */
  55   56  extern vmem_t *heap_arena;      /* primary kernel heap arena */
  56   57  extern vmem_t *hat_memload_arena; /* HAT translation arena */
  57   58  extern struct seg kvseg32;      /* 32-bit kernel heap segment */
  58   59  extern vmem_t *heap32_arena;    /* 32-bit kernel heap arena */
  59   60  extern vmem_t *heaptext_arena;  /* kernel text arena, from heap */
  60   61  extern struct as kas;           /* kernel address space */
  61   62  extern int segkmem_reloc;       /* enable/disable segkmem relocatable pages */
  62   63  extern vmem_t *static_arena;    /* arena for caches to import static memory */
  63   64  extern vmem_t *static_alloc_arena;      /* arena for allocating static memory */
  64   65  extern vmem_t *zio_arena;       /* arena for zio caches */
  65   66  extern vmem_t *zio_alloc_arena; /* arena for zio caches */
  66   67  extern struct vnode kvps[];
  67   68  /*
  68   69   * segkmem page vnodes
  69   70   */
  70   71  #define kvp             (kvps[KV_KVP])
  71   72  #define zvp             (kvps[KV_ZVP])
  72   73  #if defined(__sparc)
  73   74  #define mpvp            (kvps[KV_MPVP])
  74   75  #define promvp          (kvps[KV_PROMVP])
  75   76  #endif  /* __sparc */
  76   77  
  77   78  extern int segkmem_create(struct seg *);
  78   79  extern page_t *segkmem_page_create(void *, size_t, int, void *);
  79   80  extern void *segkmem_xalloc(vmem_t *, void *, size_t, int, uint_t,
  80   81          page_t *(*page_create_func)(void *, size_t, int, void *), void *);
  81   82  extern void *segkmem_alloc(vmem_t *, size_t, int);
  82   83  extern void *segkmem_alloc_permanent(vmem_t *, size_t, int);
  83   84  extern void segkmem_free(vmem_t *, void *, size_t);
  84   85  extern void segkmem_xfree(vmem_t *, void *, size_t, void (*)(page_t *));
  85   86  
  86   87  extern void *boot_alloc(void *, size_t, uint_t);
  87   88  extern void boot_mapin(caddr_t addr, size_t size);
  88   89  extern void kernelheap_init(void *, void *, char *, void *, void *);
  89   90  extern void segkmem_gc(void);
  90   91  
  91   92  extern void *segkmem_zio_alloc(vmem_t *, size_t, int);
  92   93  extern int segkmem_zio_create(struct seg *);
  93   94  extern void segkmem_zio_free(vmem_t *, void *, size_t);
  94   95  extern void segkmem_zio_init(void *, size_t);
  95   96  
  96   97  /*
  97   98   * Flags for segkmem_xalloc().
  98   99   *
  99  100   * SEGKMEM_SHARELOCKED requests pages which are locked SE_SHARED to be
 100  101   * returned rather than unlocked which is now the default.  Note that
 101  102   * memory returned by SEGKMEM_SHARELOCKED cannot be freed by segkmem_free().
 102  103   * This is a hack for seg_dev that should be cleaned up in the future.
 103  104   */
 104  105  #define SEGKMEM_SHARELOCKED     0x20000
 105  106  
 106  107  /*
 107  108   * Large page for kmem caches support
 108  109   */
 109  110  typedef struct segkmem_lpcb {
 110  111          kmutex_t        lp_lock;
 111  112          kcondvar_t      lp_cv;
 112  113          uint_t          lp_wait;
 113  114          uint_t          lp_uselp;
 114  115          ulong_t         lp_throttle;
 115  116  
 116  117          /* stats */
 117  118          uint64_t        sleep_allocs_failed;
 118  119          uint64_t        nosleep_allocs_failed;
 119  120          uint64_t        allocs_throttled;
 120  121          uint64_t        allocs_limited;
 121  122          uint64_t        alloc_bytes_failed;
 122  123  } segkmem_lpcb_t;
 123  124  
 124  125  extern void     *segkmem_alloc_lp(vmem_t *, size_t *, size_t, int);
 125  126  extern void     segkmem_free_lp(vmem_t *, void *, size_t);
 126  127  extern int      segkmem_lpsetup();
 127  128  extern void     segkmem_heap_lp_init(void);
 128  129  
  
    | 
      ↓ open down ↓ | 
    95 lines elided | 
    
      ↑ open up ↑ | 
  
 129  130  extern size_t   segkmem_lpsize;
 130  131  extern int      segkmem_lpszc;
 131  132  extern size_t   segkmem_heaplp_quantum;
 132  133  extern size_t   segkmem_kmemlp_max;
 133  134  
 134  135  #define SEGKMEM_USE_LARGEPAGES (segkmem_lpsize > PAGESIZE)
 135  136  
 136  137  #define IS_KMEM_VA_LARGEPAGE(vaddr)                                     \
 137  138          (((vaddr) >= heap_lp_base) && ((vaddr) < heap_lp_end))
 138  139  
      140 +extern struct seg_ops segkmem_ops;
      141 +
 139  142  #endif  /* _KERNEL */
 140  143  
 141  144  #ifdef  __cplusplus
 142  145  }
 143  146  #endif
 144  147  
 145  148  #endif  /* _VM_SEG_KMEM_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX