diff options
author | David Woodhouse <dwmw@amazon.co.uk> | 2022-12-07 09:19:31 +0000 |
---|---|---|
committer | David Woodhouse <dwmw@amazon.co.uk> | 2023-03-01 08:22:49 +0000 |
commit | d40ddd529004709350202114fc1c2fc99127647d (patch) | |
tree | 8f2a7bef965043ac4b14d3168044f78eba53412e /include/sysemu | |
parent | c789b9ef5f80ac471a270bf65cd22024594671a5 (diff) | |
download | qemu-d40ddd529004709350202114fc1c2fc99127647d.zip qemu-d40ddd529004709350202114fc1c2fc99127647d.tar.gz qemu-d40ddd529004709350202114fc1c2fc99127647d.tar.bz2 |
hw/xen: Add xen_overlay device for emulating shared xenheap pages
For the shared info page and for grant tables, Xen shares its own pages
from the "Xen heap" to the guest. The guest requests that a given page
from a certain address space (XENMAPSPACE_shared_info, etc.) be mapped
to a given GPA using the XENMEM_add_to_physmap hypercall.
To support that in qemu when *emulating* Xen, create a memory region
(migratable) and allow it to be mapped as an overlay when requested.
Xen theoretically allows the same page to be mapped multiple times
into the guest, but that's hard to track and reinstate over migration,
so we automatically *unmap* any previous mapping when creating a new
one. This approach has been used in production with.... a non-trivial
number of guests expecting true Xen, without any problems yet being
noticed.
This adds just the shared info page for now. The grant tables will be
a larger region, and will need to be overlaid one page at a time. I
think that means I need to create separate aliases for each page of
the overall grant_frames region, so that they can be mapped individually.
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
Diffstat (limited to 'include/sysemu')
-rw-r--r-- | include/sysemu/kvm_xen.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/include/sysemu/kvm_xen.h b/include/sysemu/kvm_xen.h index 5dffcc0..cec21c8 100644 --- a/include/sysemu/kvm_xen.h +++ b/include/sysemu/kvm_xen.h @@ -12,6 +12,13 @@ #ifndef QEMU_SYSEMU_KVM_XEN_H #define QEMU_SYSEMU_KVM_XEN_H +/* The KVM API uses these to indicate "no GPA" or "no GFN" */ +#define INVALID_GPA UINT64_MAX +#define INVALID_GFN UINT64_MAX + +/* QEMU plays the rĂ´le of dom0 for "interdomain" communication. */ +#define DOMID_QEMU 0 + int kvm_xen_soft_reset(void); uint32_t kvm_xen_get_caps(void); |