From: Tamas K Lengyel Date: Fri, 26 Sep 2014 14:27:57 +0000 (+0200) Subject: relocate mem_event_op domctl and access_op memop into common X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4312 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=213fd25109a3996615b5b227a0a76835e3e90a10;p=xen.git relocate mem_event_op domctl and access_op memop into common Signed-off-by: Tamas K Lengyel Acked-by: Jan Beulich Acked-by: Tim Deegan --- diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 8731e7f036..ec775559be 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1131,14 +1131,6 @@ long arch_do_domctl( } break; - case XEN_DOMCTL_mem_event_op: - { - ret = mem_event_domctl(d, &domctl->u.mem_event_op, - guest_handle_cast(u_domctl, void)); - copyback = 1; - } - break; - case XEN_DOMCTL_mem_sharing_op: { ret = mem_sharing_domctl(d, &domctl->u.mem_sharing_op); diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index 4822517379..efa49dd796 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -1435,6 +1435,15 @@ void p2m_mem_event_emulate_check(struct vcpu *v, const mem_event_response_t *rsp } } +void p2m_setup_introspection(struct domain *d) +{ + if ( hvm_funcs.enable_msr_exit_interception ) + { + d->arch.hvm_domain.introspection_enabled = 1; + hvm_funcs.enable_msr_exit_interception(d); + } +} + bool_t p2m_mem_access_check(paddr_t gpa, unsigned long gla, struct npfec npfec, mem_event_request_t **req_ptr) diff --git a/xen/arch/x86/x86_64/compat/mm.c b/xen/arch/x86/x86_64/compat/mm.c index c079702995..54f25b75f0 100644 --- a/xen/arch/x86/x86_64/compat/mm.c +++ b/xen/arch/x86/x86_64/compat/mm.c @@ -198,10 +198,6 @@ int compat_arch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg) break; } - case XENMEM_access_op: - rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t)); - break; - case XENMEM_sharing_op: { xen_mem_sharing_op_t mso; diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index cce1406035..8e5a1a1829 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -995,10 +995,6 @@ long subarch_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg) break; } - case XENMEM_access_op: - rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t)); - break; - case XENMEM_sharing_op: { xen_mem_sharing_op_t mso; diff --git a/xen/common/compat/memory.c b/xen/common/compat/memory.c index 25dc01685c..43d02bcca6 100644 --- a/xen/common/compat/memory.c +++ b/xen/common/compat/memory.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -381,6 +382,10 @@ int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) compat) break; } + case XENMEM_access_op: + rc = mem_access_memop(cmd, guest_handle_cast(compat, xen_mem_access_op_t)); + break; + case XENMEM_add_to_physmap_batch: start_extent = end_extent; break; diff --git a/xen/common/domctl.c b/xen/common/domctl.c index a4318a058d..b6f9708c25 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -1111,6 +1112,12 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) } break; + case XEN_DOMCTL_mem_event_op: + ret = mem_event_domctl(d, &op->u.mem_event_op, + guest_handle_cast(u_domctl, void)); + copyback = 1; + break; + case XEN_DOMCTL_disable_migrate: { d->disable_migrate = op->u.disable_migrate.disable; diff --git a/xen/common/mem_event.c b/xen/common/mem_event.c index a179cbcb3a..04e3b0e299 100644 --- a/xen/common/mem_event.c +++ b/xen/common/mem_event.c @@ -628,12 +628,10 @@ int mem_event_domctl(struct domain *d, xen_domctl_mem_event_op_t *mec, HVM_PARAM_ACCESS_RING_PFN, mem_access_notification); - if ( mec->op != XEN_DOMCTL_MEM_EVENT_OP_ACCESS_ENABLE && - rc == 0 && hvm_funcs.enable_msr_exit_interception ) - { - d->arch.hvm_domain.introspection_enabled = 1; - hvm_funcs.enable_msr_exit_interception(d); - } + if ( mec->op == XEN_DOMCTL_MEM_EVENT_OP_ACCESS_ENABLE_INTROSPECTION + && !rc ) + p2m_setup_introspection(d); + } break; diff --git a/xen/common/memory.c b/xen/common/memory.c index bad50cb405..cc36e394de 100644 --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -21,13 +21,14 @@ #include #include #include +#include +#include +#include #include #include #include -#include #include #include -#include struct memop_args { /* INPUT */ @@ -939,6 +940,10 @@ long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg) break; } + case XENMEM_access_op: + rc = mem_access_memop(cmd, guest_handle_cast(arg, xen_mem_access_op_t)); + break; + case XENMEM_claim_pages: if ( copy_from_guest(&reservation, arg, 1) ) return -EFAULT; diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h index 4d5570a5c0..10bf111cc0 100644 --- a/xen/include/asm-arm/p2m.h +++ b/xen/include/asm-arm/p2m.h @@ -77,6 +77,12 @@ void p2m_mem_event_emulate_check(struct vcpu *v, /* Not supported on ARM. */ }; +static inline +void p2m_setup_introspection(struct domain *d) +{ + /* No special setup on ARM. */ +} + #define p2m_is_foreign(_t) ((_t) == p2m_map_foreign) #define p2m_is_ram(_t) ((_t) == p2m_ram_rw || (_t) == p2m_ram_ro) diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index 5c16fb112e..f2842e5378 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -589,6 +589,9 @@ int p2m_get_mem_access(struct domain *d, unsigned long pfn, void p2m_mem_event_emulate_check(struct vcpu *v, const mem_event_response_t *rsp); +/* Enable arch specific introspection options (such as MSR interception). */ +void p2m_setup_introspection(struct domain *d); + /* * Internal functions, only called by other p2m code */