Hi Tim & Jan,
Thank you very much for your review.
And could you please also help me about how to get an ACK? I'm not
sure what's the next action I need to take. :-)
B.R.
Yu
On 12/6/2014 11:55 AM, Yu Zhang wrote:
XenGT (Intel Graphics Virtualization technology, please refer to
https://01.org/xen/blogs/srclarkx/2013/graphics-virtualization-
xengt) driver runs inside Dom0 as a virtual graphics device model,
and needs to trap and emulate the guest's write operations to some
specific memory pages, like memory pages used by guest graphics
driver as PPGTT(per-process graphics translation table). We added
a new p2m type, p2m_mmio_write_dm, to trap and emulate the write
operations on these graphic page tables.
Handling of this new p2m type are similar with existing p2m_ram_ro
in most condition checks, with only difference on final policy of
emulation vs. drop. For p2m_ram_ro types, write operations will not
trigger the device model, and will be discarded later in __hvm_copy();
while for the p2m_mmio_write_dm type pages, writes will go to the
device model via ioreq-server.
Previously, the conclusion in our v3 patch review is to provide a
more generalized HVMOP_map_io_range_to_ioreq_server hypercall, by
seperating rangesets inside a ioreq server to read-protected/write-
protected/both-prtected. Yet, after offline discussion with Paul,
we believe a more simplified solution may suffice. We can keep the
existing HVMOP_map_io_range_to_ioreq_server hypercall, and let the
user decide whether or not a p2m type change is necessary, because
in most cases the emulator will already use the p2m_mmio_dm type.
Changes from v5:
- Stricter type checks for p2m type transitions;
- One code style change.
Changes from v4:
- A new p2m type class, P2M_DISCARD_WRITE_TYPES, is added;
- A new predicate, p2m_is_discard_write, is used in __hvm_copy()/
__hvm_clear()/emulate_gva_to_mfn()/hvm_hap_nested_page_fault(),
to discard the write operations;
- The new p2m type, p2m_mmio_write_dm, is added to P2M_RO_TYPES;
- Coding style changes;
Changes from v3:
- Use the existing HVMOP_map_io_range_to_ioreq_server hypercall
to add write protected range;
- Modify the HVMOP_set_mem_type hypercall to support the new p2m
type for this range.
Changes from v2:
- Remove excute attribute of the new p2m type p2m_mmio_write_dm;
- Use existing rangeset for keeping the write protection page range
instead of introducing hash table;
- Some code style fix.
Changes from v1:
- Changes the new p2m type name from p2m_ram_wp to p2m_mmio_write_dm.
This means that we treat the pages as a special mmio range instead
of ram;
- Move macros to c file since only this file is using them.
- Address various comments from Jan.
Yu Zhang (2):
Add a new p2m type class - P2M_DISCARD_WRITE_TYPES
add a new p2m type - p2m_mmio_write_dm
xen/arch/x86/hvm/hvm.c | 25 ++++++++++---------------
xen/arch/x86/mm/p2m-ept.c | 1 +
xen/arch/x86/mm/p2m-pt.c | 1 +
xen/arch/x86/mm/shadow/multi.c | 2 +-
xen/include/asm-x86/p2m.h | 9 ++++++++-
xen/include/public/hvm/hvm_op.h | 1 +
6 files changed, 22 insertions(+), 17 deletions(-)
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel