Hallo, dies ist ein Test.
PWD: /www/data-lst1/unixsoft/unixsoft/kaempfer/.public_html
Running in File Mode
Relative path: ./../../../../../data-stud/../../usr/include/vm/dr_impl.h
Real path: /usr/include/vm/dr_impl.h
Zurück
/* * Copyright (c) 2012, 2021, Oracle and/or its affiliates. */ #ifndef _VM_DR_IMPL_H #define _VM_DR_IMPL_H #include <sys/avl.h> #include <sys/systm.h> #include <vm/interface.h> #include <vm/dr.h> #include <vm/util.h> #include <vm/page.h> #ifdef __cplusplus extern "C" { #endif extern pfn_t Pp_dummy_pfn; /* ------------------------------------------------------------------ */ /* * There is a single global log for all DR and PM-related activity. See * <vm/dr.h> for a list of events. */ #define DRPM_STACK_DEPTH 16 #define DRPM_MEMGRPS 15 enum drpm_spec { DRPMS_ARG0 = (1 << 1), DRPMS_ARG1 = (1 << 2), DRPMS_ARG2 = (1 << 3), DRPMS_MEMGRPSET = (1 << 4) }; typedef struct drpm_log_entry { /* for all log entries */ hrtime_t drpm_timestamp; struct _kthread *drpm_thread; pc_t drpm_stack[DRPM_STACK_DEPTH]; enum drpm_event drpm_event; enum drpm_spec drpm_spec; uintmax_t drpm_args[3]; memgrpid_t drpm_memgrps[DRPM_MEMGRPS]; uint8_t drpm_nmemgrps; uint8_t drpm_frames; /* valid frames in drpm_stack */ } drpm_log_entry_t; /* ------------------------------------------------------------------ */ typedef enum { DRMAS_START, DRMAS_IN_PHYSINSTALL, DRMAS_PEEK_OR_PANIC, DRMAS_VERIFY_TILELETS, DRMAS_ALLOC_RMS, DRMAS_ALLOC_PAGES, DRMAS_SETUP_KPM, DRMAS_IN_PHYSAVAIL, DRMAS_ADD_PHASE1, DRMAS_INIT_VM1, DRMAS_ADD_PHASE2, DRMAS_END, DRMAS_NSTATES } drma_operations_t; /* * drma_t tracks the variables associated with a DR Memory Add event. * * Range convention is [start, end) as is used throughout VM2 */ typedef struct drma { void *drma_link; kthread_t *drma_thread; /* The range we are adding */ pfn_t drma_spfn; pfn_t drma_epfn; pgcnt_t drma_npgs; /* Range of rms and page_ts for memory being added */ rm_t *drma_srm; rm_t *drma_erm; page_t *drma_spp; page_t *drma_epp; /* If non-NULL, ranges of inline rm and page_t mappings */ void *drma_inline_rm_min_va; void *drma_inline_rm_max_va; void *drma_inline_pp_min_va; void *drma_inline_pp_max_va; /* Misc */ struct memseg *drma_memseg; pfn_rangeset_t drma_avail; /* available for metadata */ pgcnt_t drma_inline_npgs; /* allocated for metadata */ /* Control flow data */ drmem_type_t drma_type; /* Extra debug state */ hrtime_t drma_state[DRMAS_NSTATES]; caddr_t drma_caller_pc; szcmap_t drma_page_alloc_szcmap; /* possible segkmem SZCs */ } drma_t; typedef enum drmd_state { DRMDS_SETUP = 0, /* initialization, adding spans */ DRMDS_DELETING, /* delete_memory_thread active */ DRMDS_FAILED, /* delete_memory_thread failed */ DRMDS_COMPLETE, /* delete_memory_thread complete */ DRMDS_NSTATES } drmd_state_t; /* * a drmd_t tracks the state associated with a DR Memory Deletion event. */ struct drmd { kthread_t *drmd_thread; /* main thread, memgrp owner */ hrtime_t drmd_start; /* start time */ uintptr_t drmd_gen; /* generation number */ drmem_type_t drmd_type; /* type of DR? */ drdel_rangeset_t drmd_ranges; /* ranges we are acting on */ /* totals */ pgcnt_t drmd_total; /* total pages in drmd_ranges */ pgcnt_t drmd_missing; /* memory missing */ pgcnt_t drmd_awake; /* memory in page_ts & inline */ pgcnt_t drmd_captured; /* managed pages captured */ pgcnt_t drmd_deleted; /* managed pages deleted */ /* callback */ kphysm_del_done_t *drmd_cb; void *drmd_cbarg; /* in-progress state */ drmd_state_t drmd_state; /* current state */ pa_capture_t *drmd_pac; /* active pa_capture */ pfn_t drmd_span_spfn; /* current span spfn */ pfn_t drmd_span_epfn; /* current span epfn */ pfn_t drmd_last_held_epfn; /* epfn of last tl held */ kphysm_result_t drmd_result; /* if !KPHYSM_OK, we failed */ volatile uint_t drmd_cancel; kcondvar_t drmd_aio_cv; uint8_t drmd_aio_cleanup_run; /* should cleanup be running? */ uint8_t drmd_aio_cleanup_running; /* is aio cleanup running? */ uint8_t drmd_check_span_result; /* span cannot be added */ szc_t drmd_memfail_szc; /* SZC we failed to allocate */ pgcnt_t drmd_memfail_pgcnt; /* # szc pages we were short */ /* Thread pointers, for reference */ kthread_t *drmd_delete_thread; kthread_t *drmd_aio_cleanup_thread; }; /* * Globally tracked state for the drmem subsystem. */ typedef struct drmem_global { kmutex_t drmg_del_mutex; kthread_t *drmg_del_thread; uintptr_t drmg_del_generation; /* current deletion gen */ kcondvar_t drmg_del_cv; kthread_t *drmg_kphysm_add_thread; boolean_t drmg_kphysm_added; drma_t *drmg_active_add; /* memgrp lock */ struct drmd *drmg_active_del; /* memgrp + drmg_del_mutex */ kthread_t *drmg_memgrp_owner; /* paired w/ delete_mem */ kthread_t *drmg_delete_memory; /* memgrp lock handed off */ kcondvar_t drmg_delete_cv; /* delete_memory -> NULL */ uint8_t drmg_delete_done; /* delete thread done */ drma_t *drmg_last_add_ptr; drma_t drmg_last_add; struct drmd *drmg_last_del_ptr; struct drmd drmg_last_del; } drmem_global_t; /* DR Memory event types */ typedef enum { DRM_ADD = 0, /* Memory being added */ DRM_DEL = 1 /* Memory being deleted */ } drmem_direction_t; #ifdef __cplusplus } #endif #endif /* _VM_DR_IMPL_H */