Message ID | 20230104115111.3240594-4-clg@kaod.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x/pv: Improve protected VM support | expand |
On 04/01/2023 12.51, Cédric Le Goater wrote: > From: Cédric Le Goater <clg@redhat.com> > > Support for protected VMs should have been enabled on the host with > the kernel parameter 'prot_virt=1'. If the hardware supports the > feature, it is reflected under sysfs. > > Signed-off-by: Cédric Le Goater <clg@redhat.com> > --- > hw/s390x/pv.c | 23 ++++++++++++++++++++++- > 1 file changed, 22 insertions(+), 1 deletion(-) > > diff --git a/hw/s390x/pv.c b/hw/s390x/pv.c > index 3a7ec70634..8d0d3f4adc 100644 > --- a/hw/s390x/pv.c > +++ b/hw/s390x/pv.c > @@ -14,6 +14,7 @@ > #include <linux/kvm.h> > > #include "qapi/error.h" > +#include "qemu/cutils.h" > #include "qemu/error-report.h" > #include "sysemu/kvm.h" > #include "qom/object_interfaces.h" > @@ -281,9 +282,29 @@ static bool s390_pv_check_cpus(Error **errp) > return true; > } > > +#define S390_PV_HOST "/sys/firmware/uv/prot_virt_host" > + > +static bool s390_pv_check_host(Error **errp) > +{ > + gchar *s = NULL; > + uint64_t pv_host = 0; > + > + if (g_file_get_contents(S390_PV_HOST, &s, NULL, NULL)) { > + pv_host = g_ascii_strtoull(s, NULL, 10); > + } > + g_free(s); > + > + if (pv_host != 1) { > + error_setg(errp, "Host does not support protected VMs"); > + return false; > + } > + > + return true; > +} > + > static bool s390_pv_guest_check(const Object *obj, Error **errp) > { > - return s390_pv_check_cpus(errp); > + return s390_pv_check_cpus(errp) && s390_pv_check_host(errp); > } > > OBJECT_DEFINE_TYPE_WITH_INTERFACES(S390PVGuest, Reviewed-by: Thomas Huth <thuth@redhat.com>
diff --git a/hw/s390x/pv.c b/hw/s390x/pv.c index 3a7ec70634..8d0d3f4adc 100644 --- a/hw/s390x/pv.c +++ b/hw/s390x/pv.c @@ -14,6 +14,7 @@ #include <linux/kvm.h> #include "qapi/error.h" +#include "qemu/cutils.h" #include "qemu/error-report.h" #include "sysemu/kvm.h" #include "qom/object_interfaces.h" @@ -281,9 +282,29 @@ static bool s390_pv_check_cpus(Error **errp) return true; } +#define S390_PV_HOST "/sys/firmware/uv/prot_virt_host" + +static bool s390_pv_check_host(Error **errp) +{ + gchar *s = NULL; + uint64_t pv_host = 0; + + if (g_file_get_contents(S390_PV_HOST, &s, NULL, NULL)) { + pv_host = g_ascii_strtoull(s, NULL, 10); + } + g_free(s); + + if (pv_host != 1) { + error_setg(errp, "Host does not support protected VMs"); + return false; + } + + return true; +} + static bool s390_pv_guest_check(const Object *obj, Error **errp) { - return s390_pv_check_cpus(errp); + return s390_pv_check_cpus(errp) && s390_pv_check_host(errp); } OBJECT_DEFINE_TYPE_WITH_INTERFACES(S390PVGuest,