[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] xen: decouple HVM and IOMMU capabilities
commit 0e2c886efa9bf9a18a3a413eaa5ead7a1d95eb93 Author: Wei Liu <wei.liu2@xxxxxxxxxx> AuthorDate: Fri Aug 24 21:01:40 2018 +0100 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Thu Sep 13 17:03:32 2018 +0100 xen: decouple HVM and IOMMU capabilities HVM and IOMMU are two distinct hardware features, yet they were bundled together in sysctl and xl's output. Decouple them on sysctl level. On toolstack level we still need to maintain a sensible semantics for `xl info`. Massage the information according to the following table: pv hvm iommu flags in xl info 0 0 0 n/a 0 0 1 n/a 0 1 0 hvm 0 1 1 hvm hvm_directio 1 0 0 NIL 1 0 1 directio 1 1 0 hvm 1 1 1 hvm hvm_directio directio Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> --- tools/libxl/libxl.c | 5 +++-- tools/libxl/libxl.h | 6 ++++++ tools/libxl/libxl_types.idl | 1 + tools/xl/xl_info.c | 5 +++-- xen/arch/x86/sysctl.c | 2 +- xen/include/public/sysctl.h | 8 ++++---- 6 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index b41ade9fda..a0d9f2bfe7 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -396,8 +396,9 @@ int libxl_get_physinfo(libxl_ctx *ctx, libxl_physinfo *physinfo) 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; diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index ae2d63df0c..2cfc1b08ad 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -67,6 +67,12 @@ * 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 diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 4a385801ba..2cceb8c057 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -1014,6 +1014,7 @@ libxl_physinfo = Struct("physinfo", [ ("cap_hvm", bool), ("cap_hvm_directio", bool), + ("cap_directio", bool), ], dir=DIR_OUT) libxl_connectorinfo = Struct("connectorinfo", [ diff --git a/tools/xl/xl_info.c b/tools/xl/xl_info.c index 6c8be26119..93e2c5fa7d 100644 --- a/tools/xl/xl_info.c +++ b/tools/xl/xl_info.c @@ -210,9 +210,10 @@ static void output_physinfo(void) 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); diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c index e704ed7f1c..456dc58d8f 100644 --- a/xen/arch/x86/sysctl.c +++ b/xen/arch/x86/sysctl.c @@ -93,7 +93,7 @@ void arch_do_physinfo(struct xen_sysctl_physinfo *pi) 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( diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index 839c1b9f25..8cd0a9cb0d 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -36,7 +36,7 @@ #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. @@ -85,9 +85,9 @@ struct xen_sysctl_tbuf_op { /* (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; -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |