Hallo, dies ist ein Test.
PWD: /www/data-lst1/unixsoft/unixsoft/kaempfer/.public_html
Running in File Mode
Relative path: ./../.././../../../../usr/include/vm/freelist.h
Real path: /usr/include/vm/freelist.h
Zurück
/* * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. */ #ifndef _VM_FREELIST_H #define _VM_FREELIST_H #ifdef __cplusplus extern "C" { #endif #include <sys/types.h> #include <sys/time.h> #include <sys/lgrp.h> #include <vm/types.h> #include <vm/szc.h> #include <vm/interface.h> #include <vm/memgrp.h> /* * ------------------------------------------------------------------ * Enumerations for types of things. */ /* * Types of RM waiters: * * RMW_CAPTURING: waiters notified when rm_capturing is cleared * or szc changes. * RMW_TYPE_OR_TAKEME: waiters notified when rm_type changes, the rm's * name changes, or rm_takeme is set, so long as * rm_capturing is set. * RMW_VM1_CONTINUE: Wait for pages to stop being named to * Vm1decachemo or Vm1demotemo. */ typedef enum { RMW_CAPTURING = 0, /* rm_capturing cleared, or szc changed */ RMW_TYPE_OR_TAKEME, /* rm_type or name changed, or rm_takeme set */ RMW_VM1_CONTINUE, /* no longer on Vm1decachemo or Vm1demotemo */ RMW_COUNT } rmw_type_t; /* * Flags for flb_getone() */ typedef enum { FLB_LOCKED = 0x0001, /* The FLB is already locked */ FLB_FORCE = 0x0002 /* ignore capturing bit */ } flb_flags_t; /* * Flags passed to various flr routines. */ typedef enum { FLR_PHYS_SLEEP = 0x01, /* phys constrained allocs can sleep */ FLR_PHYS_NOSLEEP = 0x02 } flr_flags_t; /* * Options for sac_adjust(); one or the other must be specified. * (These are not flags) */ typedef enum sac_adjust_cmd { SAC_SET = 1, SAC_CLEAR = 2 } sac_adjust_cmd_t; typedef enum { RML_PUT_FREE = 1, RML_PUT_ALLOC = 2 } rml_put_cmd_t; /* * Options for rm_cleave_range(). */ typedef enum { RMCR_FIXPP = 1, RMCR_NOFIXPP = 2 } rm_cleave_range_cmd_t; /* * Options for rm_alloc_replacement() */ typedef enum { RAR_WAIT = (1 << 0), /* can long-term sleep for credits */ RAR_MIGRATE = (1 << 1), /* fail if we can't get most-desired */ RAR_KCAGE = (1 << 2), /* allocate kcage credits */ RAR_RESIZE = (1 << 3), /* allow resizing */ RAR_HAVE_CREDIT = (1 << 4) /* don't allocate; use pushed wallet */ } rar_flags_t; /* * Array indexes to be used for rmg_totals() function. Each element in an array * represents a running total of how may of each type of rm's exist for the * rmg's looked at. */ enum rmg_total_type { RMG_TOTAL_FREE, RMG_TOTAL_OOB, RMG_TOTAL_CACHED, RMG_TOTAL_BORROWED, RMG_TOTAL_NUM }; /* * ------------------------------------------------------------------------ * Internal interfaces. * * Yes, we mean it. */ #ifdef _KERNEL /* * Init functions */ extern void flr_tcm_init(void); extern void flr_xchoose_init(void); extern struct _kthread *rm_retire_init(void); extern void vm2_static_mo_init(void); /* FLB functions */ extern void flb_rmget(flb_t *, rm_t *); extern void flb_put(rm_t *); extern void flb_decache_rm(flb_t *, rm_t *); extern void flb_unlock(flb_t *); extern void flb_walk_lock(tileid_t); extern rm_t *rm_lock(pfn_t, rmg_t **, flb_t **); extern void rm_unlock(rm_t *, rmg_t *, flb_t *); extern void rm_cleave_range(pfn_t, pfn_t, rm_cleave_range_cmd_t); extern void rm_downgrade(rm_t *, uint_t); extern void rm_upgrade(rm_t *, uint_t); extern void rm_boot_name(paddr_t, size_t, uint_t, mo_t *, vnode_t *, u_offset_t); extern void rm_init_template(rm_t *, const rm_t *, const rm_t *); extern void rm_init_named(rm_t *, const rm_t *, const rm_t *, u_offset_t); extern void rmg_totals(const rmg_t *, const rmg_t *, pgcnt_t *); extern void rml_add(rm_t **, rm_t *); extern rm_t *rml_join(rm_t *, rm_t *); extern void rml_put(rm_t *, rml_put_cmd_t); extern void rml_put_captured(rm_t *); extern int rml_capture(rm_t *); extern int rml_walk(rm_t *, pgcnt_t, pfn_t, pfn_t); extern void rml_captured_to_transition(rm_t *, pfn_t, u_offset_t, uint_t); extern void sac_adjust(flb_t *, uint_t, sac_adjust_cmd_t); extern pgcnt_t rm_change_szc_range(pfn_t, pfn_t, uint_t); extern void rm_change_type(rm_t *, uint_t); extern void rm_name(rm_t *, mo_t *, u_offset_t); extern void rm_set_takeme(rm_t *); extern void rm_clear_takeme(rm_t *); extern void rm_clear_capturing(rm_t *); extern void rm_set_holdmo(rm_t *); extern void rm_clear_holdmo(rm_t *); extern void rm_set_borrowed(rm_t *); extern void rm_clear_borrowed(rm_t *); extern void rm_wait(rm_t *, rmw_type_t); extern void rmw_broadcast(const rm_t *, rmw_type_t); extern int rm_pat_alloc(pfn_t, pfn_t, paddr_t (*)(caddr_t, void *), void *); extern void rm_pat_free(pfn_t, pfn_t); extern void rm_szc_syncpp2rm(pfn_t, pfn_t, uint_t); typedef uint_t (*rm_find_capturing_owner_f)(pa_capture_t *, void *); extern pa_capture_t *rm_find_capturing_owner(const rm_t *, rm_find_capturing_owner_f, void *); extern void rm_zero(rm_t *); typedef void rmw_wakeup_f(const rm_t *, void *); extern void rmw_install(const rm_t *, rmw_t *, rmw_wakeup_f *, void *, rmw_type_t); extern pfnrange_t rmw_install_range(rmg_t *, rmw_t *, pfnrange_t, rmw_wakeup_f *, void *, pa_capture_t *, rmw_type_t); extern pfnrange_t rmw_update_range(rmw_t *, pfnrange_t); extern pfnrange_t rmw_range(const rmw_t *); extern rmg_t *rmg_for_rmw(const rmw_t *); extern void rmw_uninstall(rmw_t *); extern rm_t *rm_alloc_replacement(const rm_t *, flr_t *, mo_t *, u_offset_t, const rm_t *, rar_flags_t); /* * RMG routines */ #define rmg_prefetch(rmg) ((void)0) extern pgcnt_t rmg_tilelet_set_szc(tileletid_t, uint_t); /* * Allocation routines */ extern void flr_init_lgrp(flr_t *, struct lgrp *); extern void flr_init_lgrpset(flr_t *, const klgrpset_t *); extern void flr_inherit_tcm(flr_t *, flr_t *); extern void flr_set_memtype(flr_t *, kmemtype_t); extern flr_t *flr_alloc_lgrp(struct lgrp *); extern flr_t *flr_alloc_lgrpset(const klgrpset_t *); extern void flr_free(flr_t *); extern rm_t *flr_choose(mo_t *, u_offset_t, pgcnt_t, uint_t, const rm_t *, flr_t *); extern rm_t *flr_choose_one(flr_t *, u_offset_t, uint_t); extern rm_t *flr_xchoose(mo_t *, u_offset_t, pgcnt_t, uint_t, paddr_t, paddr_t, flr_t *, flr_flags_t); extern rm_t *flr_choose_resize(mo_t *, u_offset_t, uint_t, const rm_t *, flr_t *); extern rm_t *flr_contig_alloc(mo_t *, u_offset_t, pgcnt_t, uint_t, pgcnt_t, pgcnt_t, pfn_t, pfn_t, flr_t *, flr_flags_t); extern void flr_pluck(flr_t *, pgcnt_t, uint_t, uint_t); extern mnodeset_t flr_mnodes(flr_t *, uint_t); extern lgrp_id_t flr_lgrpid(flr_t *); extern mnodeid_t mnode_choose(mnodeset_t, uint_t *); extern void mnodeset_to_lgrpset(mnodeset_t, klgrpset_t *); /* * The flr structure describes the physical memory placement policy for a * physical memory allocation. */ struct flr { struct lgrp *flr_lgrp; /* lgrp to allocate from */ klgrpset_t flr_lgrpset; /* lgrpset to allocate from */ krmemtype_t flr_rmemtype; /* requested memory type */ uint32_t flr__pad; tcm_t *flr_tcm; /* tile/color map, per szc */ }; /* * ------------------------------------------------------------------ * Well-known global variables. */ extern flr_t Kflr; extern flr_t Kcage_flr; extern as_t kas; #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _VM_FREELIST_H */