memcpy(physinfo->hw_cap,xcphysinfo.hw_cap, sizeof(physinfo->hw_cap));
physinfo->cap_hvm = !!(xcphysinfo.capabilities & XEN_SYSCTL_PHYSCAP_hvm);
- physinfo->cap_hvm_directio =
- !!(xcphysinfo.capabilities & XEN_SYSCTL_PHYSCAP_hvm_directio);
+ physinfo->cap_directio =
+ !!(xcphysinfo.capabilities & XEN_SYSCTL_PHYSCAP_directio);
+ physinfo->cap_hvm_directio = physinfo->cap_hvm && physinfo->cap_directio;
GC_FREE;
return 0;
* the same $(XEN_VERSION) (e.g. throughout a major release).
*/
+/* LIBXL_HAVE_PHYSINFO_CAP_DIRECTIO
+ *
+ * If this is defined, libxl_physinfo has a "cap_directio" field.
+ */
+#define LIBXL_HAVE_PHYSINFO_CAP_DIRECTIO 1
+
/* LIBXL_HAVE_CONSOLE_NOTIFY_FD
*
* If this is defined, libxl_console_exec and
("cap_hvm", bool),
("cap_hvm_directio", bool),
+ ("cap_directio", bool),
], dir=DIR_OUT)
libxl_connectorinfo = Struct("connectorinfo", [
info.hw_cap[4], info.hw_cap[5], info.hw_cap[6], info.hw_cap[7]
);
- maybe_printf("virt_caps :%s%s\n",
+ maybe_printf("virt_caps :%s%s%s\n",
info.cap_hvm ? " hvm" : "",
- info.cap_hvm_directio ? " hvm_directio" : ""
+ info.cap_hvm_directio ? " hvm_directio" : "",
+ info.cap_directio ? " directio" : ""
);
vinfo = libxl_get_version_info(ctx);
if ( hvm_enabled )
pi->capabilities |= XEN_SYSCTL_PHYSCAP_hvm;
if ( iommu_enabled )
- pi->capabilities |= XEN_SYSCTL_PHYSCAP_hvm_directio;
+ pi->capabilities |= XEN_SYSCTL_PHYSCAP_directio;
}
long arch_do_sysctl(
#include "physdev.h"
#include "tmem.h"
-#define XEN_SYSCTL_INTERFACE_VERSION 0x00000011
+#define XEN_SYSCTL_INTERFACE_VERSION 0x00000012
/*
* Read console content from Xen buffer ring.
/* (x86) The platform supports HVM guests. */
#define _XEN_SYSCTL_PHYSCAP_hvm 0
#define XEN_SYSCTL_PHYSCAP_hvm (1u<<_XEN_SYSCTL_PHYSCAP_hvm)
- /* (x86) The platform supports HVM-guest direct access to I/O devices. */
-#define _XEN_SYSCTL_PHYSCAP_hvm_directio 1
-#define XEN_SYSCTL_PHYSCAP_hvm_directio (1u<<_XEN_SYSCTL_PHYSCAP_hvm_directio)
+ /* (x86) The platform supports direct access to I/O devices with IOMMU. */
+#define _XEN_SYSCTL_PHYSCAP_directio 1
+#define XEN_SYSCTL_PHYSCAP_directio (1u<<_XEN_SYSCTL_PHYSCAP_directio)
struct xen_sysctl_physinfo {
uint32_t threads_per_core;
uint32_t cores_per_socket;