Hallo, dies ist ein Test.
PWD: /www/data-lst1/unixsoft/unixsoft/kaempfer/.public_html
Running in File Mode
Relative path: ./../../../../../../usr/include/vm/seg_kmem.h
Real path: /usr/include/vm/seg_kmem.h
Zurück
/* * Copyright (c) 1998, 2020, Oracle and/or its affiliates. */ #ifndef _VM_SEG_KMEM_H #define _VM_SEG_KMEM_H #ifdef __cplusplus extern "C" { #endif #include <sys/types.h> #include <sys/vnode.h> #include <sys/vmem.h> #include <vm/as.h> #include <vm/seg.h> #include <vm/page.h> /* * VM - Kernel Segment Driver */ #if defined(_KERNEL) typedef struct dump_arg { struct as *as; dump_addpage_f dumpfunc; } dump_arg_t; extern char *kernelheap; /* start of primary kernel heap */ extern char *ekernelheap; /* end of primary kernel heap */ extern char *heap_lp_base; /* start of kernel large page heap arena */ extern char *heap_lp_end; /* end of kernel large page heap arena */ extern struct seg kvseg; /* primary kernel heap segment */ extern struct seg kvseg_core; /* "core" kernel heap segment */ extern struct seg kvm2seg; /* vm2 sparse data structures heap segment */ extern struct seg kppvmseg; /* Segment used for DR'ed memory management */ extern vmem_t *heap_lp_arena; /* kernel large page heap arena */ extern vmem_t *heap_arena; /* primary kernel heap arena */ extern vmem_t *hat_memload_arena; /* HAT translation arena */ extern struct seg kvseg32; /* 32-bit kernel heap segment */ extern vmem_t *heap32_arena; /* 32-bit kernel heap arena */ extern vmem_t *heaptext_arena; /* kernel text arena, from heap */ extern vmem_t *heap_alloc_arena; /* For small constrained allocations */ extern struct as kas; /* kernel address space */ extern boolean_t contig_umem_support; /* DDI CONTIG UMEM support */ /* * segkmem page vnodes * These are defined in common/ml/namedarray.s to overlap with the * kvps[] array. */ extern struct vnode kvp; /* is KVP(KV_KVP) */ extern struct vnode mpvp; /* is KVP(KV_MPVP) */ extern struct vnode promvp; /* is KVP(KV_PROMVP) */ extern struct vnode defdumpvp; /* is KVP(KV_DEFDUMPVP) */ /* * Support for numa IO including large page allocations */ typedef struct segkmem_numa_args { flr_t *sknuma_args_flr; uint_t sknuma_args_szc; struct seg *sknuma_args_seg; } segkmem_numa_args_t; extern void segkmem_init(void); extern void segkmem_attach(struct seg *, void *, size_t); extern page_t *segkmem_page_create(void *, size_t, vm_flags_t, void *); extern page_t *segkmem_page_create_numa(void *, size_t, vm_flags_t, void *); extern void *segkmem_xalloc(vmem_t *, size_t, size_t, vm_flags_t, uint_t, page_t *(*page_create_func)(void *, size_t, vm_flags_t, void *), void *); extern void *segkmem_alloc_pages(void *, size_t, vm_flags_t, uint_t, page_t *(*page_create_func)(void *, size_t, vm_flags_t, void *), void *); extern void *segkmem_alloc(vmem_t *, size_t, vm_flags_t); extern void *segkmem_alloc_adi(vmem_t *, size_t, vm_flags_t); extern void segkmem_free(vmem_t *, void *, size_t); extern void segkmem_xfree(vmem_t *, void *, size_t); extern void segkmem_free_pages(void *, size_t); extern void *segkmem_alloc_one_lp(void *, size_t); extern void segkmem_free_one_lp(vnode_t *, void *, size_t); extern void *segkmem_align_alloc(vmem_t *, size_t *, size_t, void *, vm_flags_t); extern void *segkmem_numa_align_alloc(vmem_t *, size_t *, size_t, void *, vm_flags_t); #if defined(__sparc) extern void *segkmem_numa_align_alloc_le(vmem_t *, size_t *, size_t, void *, vm_flags_t); #endif extern void segkmem_free_numa(vmem_t *, void *, size_t); extern void segkmem_gc_thread_wakeup(void); extern void segkmem_gc_flush(void); extern void kernelheap_init(void *, void *, char *, void *, void *); extern void segkmem_gc_boot(void); extern void kernelheap_prom_init(char *, char *); extern void kernelheap_prom_fini(void); extern void *contig_mem_alloc(size_t); extern void *contig_mem_alloc_align(size_t, size_t); extern void *contig_mem_alloc_align_le(size_t, size_t); extern void contig_mem_free(void *, size_t); extern void *contig_mem_numa_alloc(size_t); extern void *contig_mem_numa_alloc_align(size_t, size_t); extern void contig_mem_numa_free(void *, size_t); /* * Flags for segkmem_xalloc(). * * SEGKMEM_SHARELOCKED requests pages which are locked SE_SHARED to be * returned rather than unlocked which is now the default. Note that * memory returned by SEGKMEM_SHARELOCKED cannot be freed by segkmem_free(). * This is a hack for seg_dev that should be cleaned up in the future. */ #define SEGKMEM_SHARELOCKED 0x20000 /* * Large page for kmem caches support */ typedef struct segkmem_lpcb { uint_t lp_uselp; ulong_t lp_throttle; /* stats */ uint64_t sleep_allocs_failed; uint64_t nosleep_allocs_failed; uint64_t allocs_throttled; uint64_t allocs_limited; uint64_t alloc_bytes_failed; } segkmem_lpcb_t; extern void *segkmem_alloc_lp(vmem_t *, size_t *, size_t, void *, vm_flags_t); extern void *segkmem_alloc_lp_adi(vmem_t *, size_t *, size_t, void *, vm_flags_t); extern void segkmem_free_lp(vmem_t *, void *, size_t); extern int segkmem_lpsetup(); extern void segkmem_heap_lp_init(void); extern szc_t segkmem_lpszc; /* SZC for large page kmem */ /* externs which should really go away */ extern size_t segkmem_lpsize; /* page size (in bytes) of lpkmem */ extern size_t segkmem_kmemlp_quantum; /* quantum of lp kmem caches */ #define IS_KMEM_VA_LARGEPAGE(vaddr) \ (((vaddr) >= heap_lp_base) && ((vaddr) < heap_lp_end)) /* * Static large page pool */ typedef struct lppool { void *base; /* pool base */ void *end; /* pool end */ /* alloc/free wrappers */ vmem_alloc_t *segkmem_alloc; vmem_free_t *segkmem_free; } lppool_t; #define IN_LPPOOL(va) (lppool.base <= (va) && (va) < lppool.end) extern lppool_t lppool; /* lppool accessor */ extern lppool_t lppool_in; /* params set by startup */ extern vmem_t *lppool_arena; /* lppool arena (base..end) */ extern void segkmem_kpm_dump(struct seg *, dump_addpage_f); extern void segkmem_set_dumpphase(void *, size_t, boolean_t, dump_dataphase_t); extern void *segkmem_pfn2va(pfn_t); typedef enum segkmem_vmem_create_type { SKVC_SMALL_PAGES = 0, SKVC_LARGE_PAGES, SKVC_KPM, SKVC_NTYPES /* MUST BE LAST */ } segkmem_vmem_create_type_t; extern vmem_t *segkmem_vmem_create(const char *, size_t, vmem_t *, int vmcflags, segkmem_vmem_create_type_t); #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _VM_SEG_KMEM_H */