From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tamas K Lengyel Subject: [PATCH for-4.5 v8 03/19] xen: Relocate p2m_access_t into common and swap the order Date: Tue, 23 Sep 2014 15:14:14 +0200 Message-ID: <1411478070-13836-4-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 We swap the order of the enum of types n ... rwx, as to have rwx at 0, which is the default setting when mem_access is not in use. This has performance benefits for non-memaccess paths, as now comparison is to 0 when checking if memaccess is in use, which is often faster. We fix one location in nested_hap where the order of the enum made a difference. Signed-off-by: Tamas K Lengyel Acked-by: Tim Deegan --- xen/arch/x86/mm/hap/nested_hap.c | 2 +- xen/include/asm-x86/p2m.h | 28 ---------------------------- xen/include/xen/p2m-common.h | 29 +++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/mm/hap/nested_hap.c b/xen/arch/x86/mm/hap/nested_hap.c index a4bb835..9c1ec11 100644 --- a/xen/arch/x86/mm/hap/nested_hap.c +++ b/xen/arch/x86/mm/hap/nested_hap.c @@ -264,7 +264,7 @@ nestedhvm_hap_nested_page_fault(struct vcpu *v, paddr_t *L2_gpa, switch ( p2ma_10 ) { - case p2m_access_n ... p2m_access_rwx: + case p2m_access_rwx ... p2m_access_n: break; case p2m_access_rx2rw: p2ma_10 = p2m_access_rx; diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h index bae669e..a2a6289 100644 --- a/xen/include/asm-x86/p2m.h +++ b/xen/include/asm-x86/p2m.h @@ -74,34 +74,6 @@ typedef enum { p2m_map_foreign = 14, /* ram pages from foreign domain */ } p2m_type_t; -/* - * Additional access types, which are used to further restrict - * the permissions given my the p2m_type_t memory type. Violations - * caused by p2m_access_t restrictions are sent to the mem_event - * interface. - * - * The access permissions are soft state: when any ambigious change of page - * type or use occurs, or when pages are flushed, swapped, or at any other - * convenient type, the access permissions can get reset to the p2m_domain - * default. - */ -typedef enum { - p2m_access_n = 0, /* No access permissions allowed */ - p2m_access_r = 1, - p2m_access_w = 2, - p2m_access_rw = 3, - p2m_access_x = 4, - p2m_access_rx = 5, - p2m_access_wx = 6, - p2m_access_rwx = 7, - p2m_access_rx2rw = 8, /* Special: page goes from RX to RW on write */ - p2m_access_n2rwx = 9, /* Special: page goes from N to RWX on access, * - * generates an event but does not pause the - * vcpu */ - - /* NOTE: Assumed to be only 4 bits right now */ -} p2m_access_t; - /* Modifiers to the query */ typedef unsigned int p2m_query_t; #define P2M_ALLOC (1u<<0) /* Populate PoD and paged-out entries */ diff --git a/xen/include/xen/p2m-common.h b/xen/include/xen/p2m-common.h index 9f1b771..787fc43 100644 --- a/xen/include/xen/p2m-common.h +++ b/xen/include/xen/p2m-common.h @@ -1,6 +1,35 @@ #ifndef _XEN_P2M_COMMON_H #define _XEN_P2M_COMMON_H +/* + * Additional access types, which are used to further restrict + * the permissions given my the p2m_type_t memory type. Violations + * caused by p2m_access_t restrictions are sent to the mem_event + * interface. + * + * The access permissions are soft state: when any ambiguous change of page + * type or use occurs, or when pages are flushed, swapped, or at any other + * convenient type, the access permissions can get reset to the p2m_domain + * default. + */ +typedef enum { + p2m_access_rwx = 0, /* The default access type when not used. */ + p2m_access_wx = 1, + p2m_access_rx = 2, + p2m_access_x = 3, + p2m_access_rw = 4, + p2m_access_w = 5, + p2m_access_r = 6, + p2m_access_n = 7, /* No access allowed. */ + + p2m_access_rx2rw = 8, /* Special: page goes from RX to RW on write */ + p2m_access_n2rwx = 9, /* Special: page goes from N to RWX on access, * + * generates an event but does not pause the + * vcpu */ + + /* NOTE: Assumed to be only 4 bits right now on x86. */ +} p2m_access_t; + /* Map MMIO regions in the p2m: start_gfn and nr describe the range in * * the guest physical address space to map, starting from the machine * * frame number mfn. */ -- 2.1.0