From: Tamas K Lengyel Date: Fri, 26 Sep 2014 14:26:58 +0000 (+0200) Subject: relocate set_access_required domctl into common X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~4313 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e8db63033150bed8524be138d922b0e4013f4493;p=xen.git relocate set_access_required domctl into common Signed-off-by: Tamas K Lengyel Acked-by: Tim Deegan Acked-by: Jan Beulich --- diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 26a3ea10be..8731e7f036 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1163,20 +1163,6 @@ long arch_do_domctl( break; #endif /* P2M_AUDIT */ - case XEN_DOMCTL_set_access_required: - { - struct p2m_domain* p2m; - - ret = -EPERM; - if ( current->domain == d ) - break; - - ret = 0; - p2m = p2m_get_hostp2m(d); - p2m->access_required = domctl->u.access_required.access_required; - } - break; - case XEN_DOMCTL_set_broken_page_p2m: { p2m_type_t pt; diff --git a/xen/common/domctl.c b/xen/common/domctl.c index 1ad072970d..a4318a058d 100644 --- a/xen/common/domctl.c +++ b/xen/common/domctl.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -1116,6 +1117,22 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl) } break; +#ifdef HAS_MEM_ACCESS + case XEN_DOMCTL_set_access_required: + { + struct p2m_domain* p2m; + + ret = -EPERM; + if ( current->domain == d ) + break; + + ret = 0; + p2m = p2m_get_hostp2m(d); + p2m->access_required = op->u.access_required.access_required; + } + break; +#endif + case XEN_DOMCTL_set_virq_handler: { uint32_t virq = op->u.set_virq_handler.virq; diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h index 38e32e632b..4d5570a5c0 100644 --- a/xen/include/asm-arm/p2m.h +++ b/xen/include/asm-arm/p2m.h @@ -44,6 +44,10 @@ struct p2m_domain { * at each p2m tree level. */ unsigned long shattered[4]; } stats; + + /* If true, and an access fault comes in and there is no mem_event listener, + * pause domain. Otherwise, remove access restrictions. */ + bool_t access_required; }; /* List of possible type for each page in the p2m entry. @@ -208,6 +212,9 @@ int arch_grant_map_page_identity(struct domain *d, unsigned long frame, bool_t writeable); int arch_grant_unmap_page_identity(struct domain *d, unsigned long frame); +/* get host p2m table */ +#define p2m_get_hostp2m(d) (&(d)->arch.p2m) + #endif /* _XEN_P2M_H */ /*