From: Wei Ye <wei.ye@intel.com>
To: xen-devel@lists.xen.org
Cc: keir@xen.org, ian.campbell@citrix.com,
stefano.stabellini@eu.citrix.com, ian.jackson@eu.citrix.com,
Paul.Durrant@citrix.com, jbeulich@suse.com,
Wei Ye <wei.ye@intel.com>
Subject: [PATCH v1 1/2] x86: add p2m_ram_wp
Date: Tue, 29 Jul 2014 01:55:26 +0800 [thread overview]
Message-ID: <1406570127-3616-2-git-send-email-wei.ye@intel.com> (raw)
In-Reply-To: <1406570127-3616-1-git-send-email-wei.ye@intel.com>
Add a new p2m type p2m_ram_wp. Page of p2m_ram_wp is read only, and
write will go to the device model for emulation.
Signed-off-by: Wei Ye <wei.ye@intel.com>
---
xen/arch/x86/hvm/hvm.c | 8 +++++++-
xen/arch/x86/mm/p2m-ept.c | 1 +
xen/include/asm-x86/p2m.h | 8 +++++++-
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 17ff011..0f20b62 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -2738,7 +2738,8 @@ int hvm_hap_nested_page_fault(paddr_t gpa,
* If this GFN is emulated MMIO or marked as read-only, pass the fault
* to the mmio handler.
*/
- if ( (p2mt == p2m_mmio_dm) ||
+ if ( (p2mt == p2m_mmio_dm) ||
+ (p2mt == p2m_ram_wp) ||
(access_w && (p2mt == p2m_ram_ro)) )
{
put_gfn(p2m->domain, gfn);
@@ -3829,6 +3830,11 @@ static enum hvm_copy_result __hvm_copy(
put_page(page);
return HVMCOPY_unhandleable;
}
+ if ( p2m_is_wp_ram(p2mt) )
+ {
+ put_page(page);
+ return HVMCOPY_bad_gfn_to_mfn;
+ }
p = (char *)__map_domain_page(page) + (addr & ~PAGE_MASK);
diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c
index 15c6e83..1b4a83e 100644
--- a/xen/arch/x86/mm/p2m-ept.c
+++ b/xen/arch/x86/mm/p2m-ept.c
@@ -125,6 +125,7 @@ static void ept_p2m_type_to_flags(ept_entry_t *entry, p2m_type_t type, p2m_acces
entry->mfn);
break;
case p2m_ram_logdirty:
+ case p2m_ram_wp:
case p2m_ram_ro:
case p2m_ram_shared:
entry->r = entry->x = 1;
diff --git a/xen/include/asm-x86/p2m.h b/xen/include/asm-x86/p2m.h
index 0ddbadb..bbec847 100644
--- a/xen/include/asm-x86/p2m.h
+++ b/xen/include/asm-x86/p2m.h
@@ -71,6 +71,7 @@ typedef enum {
p2m_ram_shared = 12, /* Shared or sharable memory */
p2m_ram_broken = 13, /* Broken page, access cause domain crash */
p2m_map_foreign = 14, /* ram pages from foreign domain */
+ p2m_ram_wp = 15, /* Read-only; write go to the device model */
} p2m_type_t;
/*
@@ -116,7 +117,8 @@ typedef unsigned int p2m_query_t;
| p2m_to_mask(p2m_ram_paging_out) \
| p2m_to_mask(p2m_ram_paged) \
| p2m_to_mask(p2m_ram_paging_in) \
- | p2m_to_mask(p2m_ram_shared))
+ | p2m_to_mask(p2m_ram_shared) \
+ | p2m_to_mask(p2m_ram_wp))
/* Types that represent a physmap hole that is ok to replace with a shared
* entry */
@@ -167,6 +169,9 @@ typedef unsigned int p2m_query_t;
* and must not be touched. */
#define P2M_BROKEN_TYPES (p2m_to_mask(p2m_ram_broken))
+/* Write protection types */
+#define P2M_WP_TYPES (p2m_to_mask(p2m_ram_wp))
+
/* Useful predicates */
#define p2m_is_ram(_t) (p2m_to_mask(_t) & P2M_RAM_TYPES)
#define p2m_is_hole(_t) (p2m_to_mask(_t) & P2M_HOLE_TYPES)
@@ -191,6 +196,7 @@ typedef unsigned int p2m_query_t;
#define p2m_is_any_ram(_t) (p2m_to_mask(_t) & \
(P2M_RAM_TYPES | P2M_GRANT_TYPES | \
p2m_to_mask(p2m_map_foreign)))
+#define p2m_is_wp_ram(_t) (p2m_to_mask(_t) & P2M_WP_TYPES)
/* Per-p2m-table state */
struct p2m_domain {
--
1.7.9.5
next prev parent reply other threads:[~2014-07-28 17:55 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-28 17:55 [PATCH v1 0/2] Extend ioreq-server to support page write protection Wei Ye
2014-07-28 8:24 ` Jan Beulich
2014-08-04 5:05 ` Ye, Wei
2014-08-04 7:35 ` Jan Beulich
2014-08-04 21:34 ` Tian, Kevin
2014-08-05 6:35 ` Jan Beulich
2014-08-05 6:46 ` Ye, Wei
2014-08-05 7:51 ` Jan Beulich
2014-08-05 7:35 ` Zhang, Yang Z
2014-08-05 7:51 ` Jan Beulich
2014-08-05 8:20 ` Ye, Wei
2014-08-05 15:41 ` Tian, Kevin
2014-08-06 2:11 ` Zhang, Yang Z
2014-08-06 2:33 ` Tian, Kevin
2014-08-06 2:40 ` Zhang, Yang Z
2014-08-06 2:49 ` Tian, Kevin
2014-08-06 2:50 ` Tian, Kevin
2014-08-06 3:04 ` Zhang, Yang Z
2014-08-06 15:00 ` Konrad Rzeszutek Wilk
2014-08-06 16:08 ` Tian, Kevin
2014-08-07 6:45 ` Jan Beulich
2014-08-07 16:28 ` Tian, Kevin
2014-08-08 6:32 ` Jan Beulich
2014-08-08 16:02 ` Tian, Kevin
2014-08-08 16:04 ` Tian, Kevin
2014-08-12 23:15 ` Ye, Wei
2014-08-13 8:38 ` Tim Deegan
2014-08-13 16:14 ` Tian, Kevin
2014-08-14 8:08 ` Tim Deegan
2014-08-14 17:49 ` Tian, Kevin
2014-08-14 20:25 ` Tim Deegan
2014-08-14 22:53 ` Tian, Kevin
2014-08-14 23:12 ` Jan Beulich
2014-08-14 23:33 ` Tian, Kevin
2014-08-06 17:38 ` Tian, Kevin
2014-07-28 17:55 ` Wei Ye [this message]
2014-07-28 8:31 ` [PATCH v1 1/2] x86: add p2m_ram_wp Jan Beulich
2014-08-04 5:10 ` Ye, Wei
2014-08-04 7:37 ` Jan Beulich
2014-08-05 7:09 ` Ye, Wei
2014-07-28 17:55 ` [PATCH v1 2/2] ioreq-server: Support scatter page forwarding Wei Ye
2014-07-28 8:57 ` Jan Beulich
2014-08-04 5:41 ` Ye, Wei
2014-08-04 7:47 ` Jan Beulich
2014-08-04 21:39 ` Tian, Kevin
2014-08-05 6:38 ` Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1406570127-3616-2-git-send-email-wei.ye@intel.com \
--to=wei.ye@intel.com \
--cc=Paul.Durrant@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.