#include <palacios/vmm_direct_paging.h>
+
+#ifdef CONFIG_SHADOW_PAGING_TELEMETRY
+#include <palacios/vmm_telemetry.h>
+#endif
+
#ifdef CONFIG_SYMBIOTIC_SWAP
#include <palacios/vmm_sym_swap.h>
#endif
+#ifdef CONFIG_SHADOW_PAGING_TELEMETRY
+static void telemetry_cb(struct guest_info * info, void * private_data, char * hdr) {
+ V3_Print("%s Guest Page faults: %d\n", hdr, info->shdw_pg_state.guest_faults);
+}
+#endif
+
+
+
int v3_init_shadow_page_state(struct guest_info * info) {
struct shadow_page_state * state = &(info->shdw_pg_state);
state->guest_efer.value = 0x0LL;
INIT_LIST_HEAD(&(state->page_list));
+
+#ifdef CONFIG_SHADOW_PAGING_TELEMETRY
+ if (info->enable_telemetry) {
+ v3_add_telemetry_cb(info, telemetry_cb, NULL);
+ }
+#endif
return 0;
}
static int inject_guest_pf(struct guest_info * info, addr_t fault_addr, pf_error_t error_code) {
+ info->ctrl_regs.cr2 = fault_addr;
-#ifdef CONFIG_PROFILE_VMM
- if (info->enable_profiler) {
- info->profiler.guest_pf_cnt++;
- }
+#ifdef CONFIG_SHADOW_PAGING_TELEMETRY
+ info->shdw_pg_state.guest_faults++;
#endif
- info->ctrl_regs.cr2 = fault_addr;
-
return v3_raise_exception_with_error(info, PF_EXCEPTION, *(uint_t *)&error_code);
}