Message ID | 20200318143047.2335-6-frankja@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | s390x: Protected Virtualization support | expand |
On Wed, 18 Mar 2020 10:30:36 -0400 Janosch Frank <frankja@linux.ibm.com> wrote: > Ballooning in protected VMs can only be done when the guest shares the > pages it gives to the host. If pages are not shared, the integrity > checks will fail once those pages have been altered and are given back > to the guest. > > As we currently do not yet have a solution for this we will continue > like this: > > 1. We block ballooning now in QEMU (with this patch). > > 2. Later we will provide a change to virtio that removes the blocker > and adds VIRTIO_F_IOMMU_PLATFORM automatically by QEMU when doing the > protvirt switch. This is OK, as the balloon driver in Linux (the only > supported guest) will refuse to work with the IOMMU_PLATFORM feature > bit set. > > 3. Later, we can fix the guest balloon driver to accept the IOMMU > feature bit and correctly exercise sharing and unsharing of balloon > pages. > > Signed-off-by: Janosch Frank <frankja@linux.ibm.com> > Reviewed-by: David Hildenbrand <david@redhat.com> > Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com> > Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com> > --- > hw/s390x/s390-virtio-ccw.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) Reviewed-by: Cornelia Huck <cohuck@redhat.com>
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c index 8013c82236a36724..3cf19c99f3468b7d 100644 --- a/hw/s390x/s390-virtio-ccw.c +++ b/hw/s390x/s390-virtio-ccw.c @@ -42,6 +42,7 @@ #include "hw/qdev-properties.h" #include "hw/s390x/tod.h" #include "sysemu/sysemu.h" +#include "sysemu/balloon.h" #include "hw/s390x/pv.h" #include <linux/kvm.h> #include "migration/blocker.h" @@ -328,6 +329,7 @@ static void s390_machine_unprotect(S390CcwMachineState *ms) ms->pv = false; migrate_del_blocker(pv_mig_blocker); error_free_or_abort(&pv_mig_blocker); + qemu_balloon_inhibit(false); } static int s390_machine_protect(S390CcwMachineState *ms) @@ -335,10 +337,18 @@ static int s390_machine_protect(S390CcwMachineState *ms) Error *local_err = NULL; int rc; + /* + * Ballooning on protected VMs needs support in the guest for + * sharing and unsharing balloon pages. Block ballooning for + * now, until we have a solution to make at least Linux guests + * either support it or fail gracefully. + */ + qemu_balloon_inhibit(true); error_setg(&pv_mig_blocker, "protected VMs are currently not migrateable."); rc = migrate_add_blocker(pv_mig_blocker, &local_err); if (rc) { + qemu_balloon_inhibit(false); error_report_err(local_err); error_free_or_abort(&pv_mig_blocker); return rc; @@ -347,6 +357,7 @@ static int s390_machine_protect(S390CcwMachineState *ms) /* Create SE VM */ rc = s390_pv_vm_enable(); if (rc) { + qemu_balloon_inhibit(false); error_report_err(local_err); migrate_del_blocker(pv_mig_blocker); error_free_or_abort(&pv_mig_blocker);