From b81cb76e34ac27441d270a655e48f741bf6b4b37 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Thu, 19 Nov 2015 13:07:07 +0000 Subject: [PATCH] xen: Implement __HYPERVISOR_mmu_update Signed-off-by: Ian Campbell --- coregrind/m_syswrap/syswrap-xen.c | 16 +++++++++++++++- include/vki/vki-xen.h | 5 +++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/coregrind/m_syswrap/syswrap-xen.c b/coregrind/m_syswrap/syswrap-xen.c index 20341c4..5c0e77b 100644 --- a/coregrind/m_syswrap/syswrap-xen.c +++ b/coregrind/m_syswrap/syswrap-xen.c @@ -109,6 +109,15 @@ static void bad_subop ( ThreadId tid, SET_STATUS_Failure(VKI_ENOSYS); } +PRE(mmu_update) +{ + PRINT("__HYPERVISOR_mmu_update ( %#lx, %#lx, %#lx, %#lx )", + ARG1, ARG2, ARG3, ARG4); + + PRE_MEM_READ("__HYPERVISOR_mmu_update", + (Addr)ARG1, sizeof(struct vki_xen_mmu_update)*ARG2); +} + PRE(memory_op) { PRINT("__HYPERVISOR_memory_op ( %lu, %#lx )", ARG1, ARG2); @@ -1327,6 +1336,11 @@ PRE(tmem_op) #undef __PRE_XEN_TMEMOP_READ } +POST(mmu_update) +{ + POST_MEM_WRITE(ARG3, sizeof(unsigned int)); +} + POST(memory_op) { switch (ARG1) { @@ -2035,7 +2049,7 @@ typedef static XenHypercallTableEntry hypercall_table[] = { // __VKI_XEN_set_trap_table // 0 - // __VKI_XEN_mmu_update // 1 + HYPXY(__VKI_XEN_mmu_update, mmu_update, 4), // 1 // __VKI_XEN_set_gdt // 2 // __VKI_XEN_stack_switch // 3 // __VKI_XEN_set_callbacks // 4 diff --git a/include/vki/vki-xen.h b/include/vki/vki-xen.h index 924a1e9..0d6ed0c 100644 --- a/include/vki/vki-xen.h +++ b/include/vki/vki-xen.h @@ -104,6 +104,11 @@ struct vki_xenctl_bitmap { vki_uint32_t nr_bits; }; +struct vki_xen_mmu_update { + vki_uint64_t ptr; /* Machine address of PTE. */ + vki_uint64_t val; /* New contents of PTE. */ +}; + #include #include #include -- 2.1.4