From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tamas K Lengyel Subject: [PATCH for-4.5 v8 06/19] xen: Relocate mem_event_op domctl and access_op memop into common. Date: Tue, 23 Sep 2014 15:14:17 +0200 Message-ID: <1411478070-13836-7-git-send-email-tklengyel@sec.in.tum.de> References: <1411478070-13836-1-git-send-email-tklengyel@sec.in.tum.de> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1411478070-13836-1-git-send-email-tklengyel@sec.in.tum.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: ian.campbell@citrix.com, tim@xen.org, julien.grall@linaro.org, ian.jackson@eu.citrix.com, stefano.stabellini@citrix.com, andres@lagarcavilla.org, jbeulich@suse.com, dgdegra@tycho.nsa.gov, Tamas K Lengyel List-Id: xen-devel@lists.xenproject.org Signed-off-by: Tamas K Lengyel Acked-by: Jan Beulich Acked-by: Tim Deegan --- v8: Move the new enable_msr_exit_interception test into the p2m layer. v6: Grouping style fix of #includes in common/memory.c. v5: Move memop compat into common as well. Position domctl in switch relative to the domctl #. v4: Don't remove memop handling from x86_64/compat and style fixes. --- xen/arch/x86/domctl.c | 8 -------- xen/arch/x86/mm/p2m.c | 9 +++++++++ xen/arch/x86/x86_64/compat/mm.c | 4 ---- xen/arch/x86/x86_64/mm.c | 4 ---- xen/common/compat/memory.c | 5 +++++ xen/common/domctl.c | 7 +++++++ xen/common/mem_event.c | 9 +++------ xen/common/memory.c | 9 +++++++-- xen/include/asm-arm/p2m.h | 5 +++++ xen/include/asm-x86/p2m.h | 3 +++ 10 files changed, 39 insertions(+), 24 deletions(-) diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 8731e7f..ec77555 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 92b20bc..b46284d 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -1436,6 +1436,15 @@ void p2m_mem_event_emulate_check(struct domain *d, const mem_event_response_t *r } } +void p2m_enable_msr_exit_interception(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 c079702..54f25b7 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 cce1406..8e5a1a1 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 25dc016..43d02bc 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 329e535..fd8dd44 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 9f1a1b0..aa39f7b 100644 --- a/xen/common/mem_event.c +++ b/xen/common/mem_event.c @@ -623,12 +623,9 @@ 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 ( !rc && mec->op != XEN_DOMCTL_MEM_EVENT_OP_ACCESS_ENABLE ) + p2m_enable_msr_exit_interception(d); + } break; diff --git a/xen/common/memory.c b/xen/common/memory.c index bad50cb..cc36e39 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 12fe808..27225c4 100644 --- a/xen/include/asm-arm/p2m.h +++ b/xen/include/asm-arm/p2m.h @@ -77,6 +77,11 @@ void p2m_mem_event_emulate_check(struct domain *d, /* Not supported on ARM. */ }; +void p2m_enable_msr_exit_interception(struct domain *d) +{ + /* Not supported 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 2513c6f..68e871b 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 domain *d, const mem_event_response_t *rsp); +/* Enable MSR exit interception. */ +void p2m_enable_msr_exit_interception(struct domain *d); + /* * Internal functions, only called by other p2m code */ -- 2.1.0