From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tamas K Lengyel Subject: [PATCH for-4.5 v7 05/21] xen: Relocate p2m_access_t into common and swap the order Date: Wed, 17 Sep 2014 22:51:08 +0200 Message-ID: <1410987084-11899-6-git-send-email-tklengyel@sec.in.tum.de> References: <1410987084-11899-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: <1410987084-11899-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. This allows us to memset the permission store to 0, without having to specify rwx as the default permission when memaccess is not in use. This also has performance benefits for non-memaccess paths, as now comparison is to 0 when checking if memaccess is in use, which is usually faster. We fix one location in nested_hap where the order of the enum made a difference. Signed-off-by: Tamas K Lengyel --- 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