mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-09-06 18:05:37 +00:00
![David Woodhouse](/assets/img/avatar_default.png)
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>
144 lines
3.8 KiB
C
144 lines
3.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/* Test programs for various Xen versions that QEMU supports. */
|
|
#if CONFIG_XEN_CTRL_INTERFACE_VERSION == 41100
|
|
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
|
#define __XEN_TOOLS__
|
|
#include <xendevicemodel.h>
|
|
#include <xenforeignmemory.h>
|
|
int main(void) {
|
|
xendevicemodel_handle *xd;
|
|
xenforeignmemory_handle *xfmem;
|
|
|
|
xd = xendevicemodel_open(0, 0);
|
|
xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
|
|
|
|
xfmem = xenforeignmemory_open(0, 0);
|
|
xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 41000
|
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
|
#include <xenforeignmemory.h>
|
|
#include <xentoolcore.h>
|
|
int main(void) {
|
|
xenforeignmemory_handle *xfmem;
|
|
|
|
xfmem = xenforeignmemory_open(0, 0);
|
|
xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
|
|
xentoolcore_restrict_all(0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40900
|
|
#undef XC_WANT_COMPAT_DEVICEMODEL_API
|
|
#define __XEN_TOOLS__
|
|
#include <xendevicemodel.h>
|
|
int main(void) {
|
|
xendevicemodel_handle *xd;
|
|
|
|
xd = xendevicemodel_open(0, 0);
|
|
xendevicemodel_close(xd);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40800
|
|
/*
|
|
* If we have stable libs the we don't want the libxc compat
|
|
* layers, regardless of what CFLAGS we may have been given.
|
|
*
|
|
* Also, check if xengnttab_grant_copy_segment_t is defined and
|
|
* grant copy operation is implemented.
|
|
*/
|
|
#undef XC_WANT_COMPAT_EVTCHN_API
|
|
#undef XC_WANT_COMPAT_GNTTAB_API
|
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
|
#include <xenctrl.h>
|
|
#include <xenstore.h>
|
|
#include <xenevtchn.h>
|
|
#include <xengnttab.h>
|
|
#include <xenforeignmemory.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 = NULL;
|
|
xenforeignmemory_handle *xfmem;
|
|
xenevtchn_handle *xe;
|
|
xengnttab_handle *xg;
|
|
xengnttab_grant_copy_segment_t* seg = NULL;
|
|
|
|
xs_daemon_open();
|
|
|
|
xc = xc_interface_open(0, 0, 0);
|
|
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 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);
|
|
|
|
xfmem = xenforeignmemory_open(0, 0);
|
|
xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
|
|
|
|
xe = xenevtchn_open(0, 0);
|
|
xenevtchn_fd(xe);
|
|
|
|
xg = xengnttab_open(0, 0);
|
|
xengnttab_grant_copy(xg, 0, seg);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#elif CONFIG_XEN_CTRL_INTERFACE_VERSION == 40701
|
|
/*
|
|
* If we have stable libs the we don't want the libxc compat
|
|
* layers, regardless of what CFLAGS we may have been given.
|
|
*/
|
|
#undef XC_WANT_COMPAT_EVTCHN_API
|
|
#undef XC_WANT_COMPAT_GNTTAB_API
|
|
#undef XC_WANT_COMPAT_MAP_FOREIGN_API
|
|
#include <xenctrl.h>
|
|
#include <xenstore.h>
|
|
#include <xenevtchn.h>
|
|
#include <xengnttab.h>
|
|
#include <xenforeignmemory.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 = NULL;
|
|
xenforeignmemory_handle *xfmem;
|
|
xenevtchn_handle *xe;
|
|
xengnttab_handle *xg;
|
|
|
|
xs_daemon_open();
|
|
|
|
xc = xc_interface_open(0, 0, 0);
|
|
xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 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);
|
|
|
|
xfmem = xenforeignmemory_open(0, 0);
|
|
xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
|
|
|
|
xe = xenevtchn_open(0, 0);
|
|
xenevtchn_fd(xe);
|
|
|
|
xg = xengnttab_open(0, 0);
|
|
xengnttab_map_grant_ref(xg, 0, 0, 0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
#else
|
|
#error invalid CONFIG_XEN_CTRL_INTERFACE_VERSION
|
|
#endif
|