xen: Drop support for Xen versions below 4.7.1
In restructuring to allow for internal emulation of Xen functionality,
I broke compatibility for Xen 4.6 and earlier. Fix this by explicitly
removing support for anything older than 4.7.1, which is also ancient
but it does still build, and the compatibility support for it is fairly
unintrusive.
Fixes: 15e283c5b6
("hw/xen: Add foreignmem operations to allow redirection to internal emulation")
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
Message-Id: <20230412185102.441523-4-dwmw2@infradead.org>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
This commit is contained in:
parent
8442232eba
commit
2f20b1732d
@ -28,46 +28,13 @@
|
||||
#include <xenctrl.h>
|
||||
|
||||
/*
|
||||
* We don't support Xen prior to 4.2.0.
|
||||
* We don't support Xen prior to 4.7.1.
|
||||
*/
|
||||
|
||||
/* Xen 4.2 through 4.6 */
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40701
|
||||
|
||||
typedef xc_evtchn xenevtchn_handle;
|
||||
typedef evtchn_port_or_error_t xenevtchn_port_or_error_t;
|
||||
|
||||
#define xenevtchn_open(l, f) xc_evtchn_open(l, f);
|
||||
#define xenevtchn_close(h) xc_evtchn_close(h)
|
||||
#define xenevtchn_fd(h) xc_evtchn_fd(h)
|
||||
#define xenevtchn_pending(h) xc_evtchn_pending(h)
|
||||
#define xenevtchn_notify(h, p) xc_evtchn_notify(h, p)
|
||||
#define xenevtchn_bind_interdomain(h, d, p) xc_evtchn_bind_interdomain(h, d, p)
|
||||
#define xenevtchn_unmask(h, p) xc_evtchn_unmask(h, p)
|
||||
#define xenevtchn_unbind(h, p) xc_evtchn_unbind(h, p)
|
||||
|
||||
typedef xc_gnttab xengnttab_handle;
|
||||
|
||||
#define xengnttab_open(l, f) xc_gnttab_open(l, f)
|
||||
#define xengnttab_close(h) xc_gnttab_close(h)
|
||||
#define xengnttab_set_max_grants(h, n) xc_gnttab_set_max_grants(h, n)
|
||||
#define xengnttab_map_grant_ref(h, d, r, p) xc_gnttab_map_grant_ref(h, d, r, p)
|
||||
#define xengnttab_unmap(h, a, n) xc_gnttab_munmap(h, a, n)
|
||||
#define xengnttab_map_grant_refs(h, c, d, r, p) \
|
||||
xc_gnttab_map_grant_refs(h, c, d, r, p)
|
||||
#define xengnttab_map_domain_grant_refs(h, c, d, r, p) \
|
||||
xc_gnttab_map_domain_grant_refs(h, c, d, r, p)
|
||||
|
||||
typedef xc_interface xenforeignmemory_handle;
|
||||
|
||||
#else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 40701 */
|
||||
|
||||
#include <xenevtchn.h>
|
||||
#include <xengnttab.h>
|
||||
#include <xenforeignmemory.h>
|
||||
|
||||
#endif
|
||||
|
||||
/* Xen before 4.8 */
|
||||
|
||||
static int libxengnttab_fallback_grant_copy(xengnttab_handle *xgt,
|
||||
@ -223,26 +190,6 @@ static struct gnttab_backend_ops libxengnttab_backend_ops = {
|
||||
.unmap = libxengnttab_backend_unmap,
|
||||
};
|
||||
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40701
|
||||
|
||||
static void *libxenforeignmem_backend_map(uint32_t dom, void *addr, int prot,
|
||||
size_t pages, xfn_pfn_t *pfns,
|
||||
int *errs)
|
||||
{
|
||||
if (errs) {
|
||||
return xc_map_foreign_bulk(xen_xc, dom, prot, pfns, errs, pages);
|
||||
} else {
|
||||
return xc_map_foreign_pages(xen_xc, dom, prot, pfns, pages);
|
||||
}
|
||||
}
|
||||
|
||||
static int libxenforeignmem_backend_unmap(void *addr, size_t pages)
|
||||
{
|
||||
return munmap(addr, pages * XC_PAGE_SIZE);
|
||||
}
|
||||
|
||||
#else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 40701 */
|
||||
|
||||
static void *libxenforeignmem_backend_map(uint32_t dom, void *addr, int prot,
|
||||
size_t pages, xen_pfn_t *pfns,
|
||||
int *errs)
|
||||
@ -256,8 +203,6 @@ static int libxenforeignmem_backend_unmap(void *addr, size_t pages)
|
||||
return xenforeignmemory_unmap(xen_fmem, addr, pages);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
struct foreignmem_backend_ops libxenforeignmem_backend_ops = {
|
||||
.map = libxenforeignmem_backend_map,
|
||||
.unmap = libxenforeignmem_backend_unmap,
|
||||
|
@ -24,23 +24,11 @@
|
||||
extern xc_interface *xen_xc;
|
||||
|
||||
/*
|
||||
* We don't support Xen prior to 4.2.0.
|
||||
* We don't support Xen prior to 4.7.1.
|
||||
*/
|
||||
|
||||
/* Xen 4.2 through 4.6 */
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40701
|
||||
|
||||
typedef xc_interface xenforeignmemory_handle;
|
||||
|
||||
#define xenforeignmemory_open(l, f) xen_xc
|
||||
#define xenforeignmemory_close(h)
|
||||
|
||||
#else /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 40701 */
|
||||
|
||||
#include <xenforeignmemory.h>
|
||||
|
||||
#endif
|
||||
|
||||
extern xenforeignmemory_handle *xen_fmem;
|
||||
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40900
|
||||
@ -148,8 +136,6 @@ static inline xendevicemodel_handle *xendevicemodel_open(
|
||||
return xen_xc;
|
||||
}
|
||||
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION >= 40500
|
||||
|
||||
static inline int xendevicemodel_create_ioreq_server(
|
||||
xendevicemodel_handle *dmod, domid_t domid, int handle_bufioreq,
|
||||
ioservid_t *id)
|
||||
@ -211,8 +197,6 @@ static inline int xendevicemodel_set_ioreq_server_state(
|
||||
return xc_hvm_set_ioreq_server_state(dmod, domid, id, enabled);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_XEN_CTRL_INTERFACE_VERSION >= 40500 */
|
||||
|
||||
static inline int xendevicemodel_set_pci_intx_level(
|
||||
xendevicemodel_handle *dmod, domid_t domid, uint16_t segment,
|
||||
uint8_t bus, uint8_t device, uint8_t intx, unsigned int level)
|
||||
@ -340,15 +324,6 @@ static inline int xen_get_vmport_regs_pfn(xc_interface *xc, domid_t dom,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Xen before 4.6 */
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40600
|
||||
|
||||
#ifndef HVM_IOREQSRV_BUFIOREQ_ATOMIC
|
||||
#define HVM_IOREQSRV_BUFIOREQ_ATOMIC 2
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
static inline int xen_get_default_ioreq_server_info(domid_t dom,
|
||||
xen_pfn_t *ioreq_pfn,
|
||||
xen_pfn_t *bufioreq_pfn,
|
||||
@ -386,84 +361,6 @@ static inline int xen_get_default_ioreq_server_info(domid_t dom,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Xen before 4.5 */
|
||||
#if CONFIG_XEN_CTRL_INTERFACE_VERSION < 40500
|
||||
|
||||
#ifndef HVM_PARAM_BUFIOREQ_EVTCHN
|
||||
#define HVM_PARAM_BUFIOREQ_EVTCHN 26
|
||||
#endif
|
||||
|
||||
#define IOREQ_TYPE_PCI_CONFIG 2
|
||||
|
||||
typedef uint16_t ioservid_t;
|
||||
|
||||
static inline void xen_map_memory_section(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
MemoryRegionSection *section)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_unmap_memory_section(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
MemoryRegionSection *section)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_map_io_section(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
MemoryRegionSection *section)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_unmap_io_section(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
MemoryRegionSection *section)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_map_pcidev(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
PCIDevice *pci_dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_unmap_pcidev(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
PCIDevice *pci_dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_create_ioreq_server(domid_t dom,
|
||||
ioservid_t *ioservid)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xen_destroy_ioreq_server(domid_t dom,
|
||||
ioservid_t ioservid)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int xen_get_ioreq_server_info(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
xen_pfn_t *ioreq_pfn,
|
||||
xen_pfn_t *bufioreq_pfn,
|
||||
evtchn_port_t *bufioreq_evtchn)
|
||||
{
|
||||
return xen_get_default_ioreq_server_info(dom, ioreq_pfn,
|
||||
bufioreq_pfn,
|
||||
bufioreq_evtchn);
|
||||
}
|
||||
|
||||
static inline int xen_set_ioreq_server_state(domid_t dom,
|
||||
ioservid_t ioservid,
|
||||
bool enable)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Xen 4.5 */
|
||||
#else
|
||||
|
||||
static bool use_default_ioreq_server;
|
||||
|
||||
static inline void xen_map_memory_section(domid_t dom,
|
||||
@ -624,6 +521,4 @@ static inline int xen_set_ioreq_server_state(domid_t dom,
|
||||
enable);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* QEMU_HW_XEN_NATIVE_H */
|
||||
|
@ -1683,16 +1683,13 @@ if get_option('xen').enabled() or (get_option('xen').auto() and have_system)
|
||||
endif
|
||||
endif
|
||||
if not xen.found()
|
||||
xen_tests = [ '4.11.0', '4.10.0', '4.9.0', '4.8.0', '4.7.1', '4.6.0', '4.5.0', '4.2.0' ]
|
||||
xen_tests = [ '4.11.0', '4.10.0', '4.9.0', '4.8.0', '4.7.1' ]
|
||||
xen_libs = {
|
||||
'4.11.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
|
||||
'4.10.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn', 'xentoolcore' ],
|
||||
'4.9.0': [ 'xenstore', 'xenctrl', 'xendevicemodel', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
||||
'4.8.0': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
||||
'4.7.1': [ 'xenstore', 'xenctrl', 'xenforeignmemory', 'xengnttab', 'xenevtchn' ],
|
||||
'4.6.0': [ 'xenstore', 'xenctrl' ],
|
||||
'4.5.0': [ 'xenstore', 'xenctrl' ],
|
||||
'4.2.0': [ 'xenstore', 'xenctrl' ],
|
||||
}
|
||||
xen_deps = {}
|
||||
foreach ver: xen_tests
|
||||
|
@ -138,66 +138,6 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40600
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc;
|
||||
xs_daemon_open();
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_gnttab_open(NULL, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
|
||||
xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40500
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc;
|
||||
xs_daemon_open();
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_gnttab_open(NULL, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40200
|
||||
#include <xenctrl.h>
|
||||
#include <xenstore.h>
|
||||
#include <stdint.h>
|
||||
#include <xen/hvm/hvm_info_table.h>
|
||||
#if !defined(HVM_MAX_VCPUS)
|
||||
# error HVM_MAX_VCPUS not defined
|
||||
#endif
|
||||
int main(void) {
|
||||
xc_interface *xc;
|
||||
xs_daemon_open();
|
||||
xc = xc_interface_open(0, 0, 0);
|
||||
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
|
||||
xc_gnttab_open(NULL, 0);
|
||||
xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
|
||||
xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
#error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user