|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-4.5 v10 03/19] xen: Relocate p2m_access_t into common and swap the order
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 <tklengyel@xxxxxxxxxxxxx>
Acked-by: Tim Deegan <tim@xxxxxxx>
---
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 453aeef..42c04b2 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
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |