#include <palacios/vmm_sym_swap.h>
#include <palacios/vmm_list.h>
-
+#include <palacios/vm_guest.h>
#ifdef CONFIG_SYMBIOTIC_SWAP_TELEMETRY
#include <palacios/vmm_telemetry.h>
#ifdef CONFIG_SYMBIOTIC_SWAP_TELEMETRY
-static void telemetry_cb(struct guest_info * info, void * private_data) {
+static void telemetry_cb(struct guest_info * info, void * private_data, char * hdr) {
struct v3_sym_swap_state * swap_state = &(info->swap_state);
- V3_Print("Symbiotic Swap:\n");
- V3_Print("\tRead faults=%d\n", swap_state->read_faults);
- V3_Print("\tWrite faults=%d\n", swap_state->write_faults);
- V3_Print("\tFlushes=%d\n", swap_state->flushes);
+ V3_Print("%sSymbiotic Swap:\n", hdr);
+ V3_Print("%s\tRead faults=%d\n", hdr, swap_state->read_faults);
+ V3_Print("%s\tWrite faults=%d\n", hdr, swap_state->write_faults);
+ V3_Print("%s\tMapped Pages=%d\n", hdr, swap_state->mapped_pages);
+ V3_Print("%s\tFlushes=%d\n", hdr, swap_state->flushes);
}
#endif
struct v3_sym_swap_state * swap_state = &(info->swap_state);
struct hashtable_iter * ht_iter = v3_create_htable_iter(swap_state->shdw_ptr_ht);
- PrintDebug("Flushing Symbiotic Swap table\n");
+ // PrintDebug("Flushing Symbiotic Swap table\n");
#ifdef CONFIG_SYMBIOTIC_SWAP_TELEMETRY
swap_state->flushes++;
return 0;
}
+int v3_get_vaddr_perms(struct guest_info * info, addr_t vaddr, pte32_t * guest_pte, pf_error_t * page_perms) {
+ uint32_t pte_val = *(uint32_t *)guest_pte;
+
+ // symcall to check if page is in cache or on swap disk
+ if (v3_sym_call3(info, SYMCALL_MEM_LOOKUP, (uint64_t *)&vaddr, (uint64_t *)&pte_val, (uint64_t *)page_perms) == -1) {
+ PrintError("Sym call error?? that's weird... \n");
+ return -1;
+ }
+
+ V3_Print("page perms = %x\n", *(uint32_t *)page_perms);
+
+ return 0;
+}
+
+
addr_t v3_get_swapped_pg_addr(struct guest_info * info, pte32_t * shadow_pte, pte32_t * guest_pte) {
struct list_head * shdw_ptr_list = NULL;
return 0;
}
+
+
swp_page_ptr = swp_dev->ops->get_swap_entry(get_pg_index(guest_pte), swp_dev->private_data);
if (swp_page_ptr == NULL) {