[meta-virtualization] [PATCH] libvirt: Fix bug in assigning virtio-mmio disks with qemu

Bruce Ashfield bruce.ashfield at gmail.com
Wed Apr 6 23:57:14 PDT 2016


On Tue, Apr 5, 2016 at 11:48 AM, Bogdan Purcareata <
bogdan.purcareata at nxp.com> wrote:

> Patch contains a more detailed description. Basically allows adding
> virtio-mmio
> block device to QEMU guests. Tested on ARM64.
>
> Please apply on jethro branch.
>

We don't want to create functionality on old branches that isn't also on
master.
Is there any reason why this wouldn't be applicable to master as well ?

Bruce


>
> Signed-off-by: Bogdan Purcareata <bogdan.purcareata at nxp.com>
> ---
>  ...io-mmio-disks-in-qemuAssignDevicePCISlots.patch | 81
> ++++++++++++++++++++++
>  recipes-extended/libvirt/libvirt_1.2.19.bb         |  1 +
>  2 files changed, 82 insertions(+)
>  create mode 100644
> recipes-extended/libvirt/libvirt/Ignore-virtio-mmio-disks-in-qemuAssignDevicePCISlots.patch
>
> diff --git
> a/recipes-extended/libvirt/libvirt/Ignore-virtio-mmio-disks-in-qemuAssignDevicePCISlots.patch
> b/recipes-extended/libvirt/libvirt/Ignore-virtio-mmio-disks-in-qemuAssignDevicePCISlots.patch
> new file mode 100644
> index 0000000..f0b7ab5
> --- /dev/null
> +++
> b/recipes-extended/libvirt/libvirt/Ignore-virtio-mmio-disks-in-qemuAssignDevicePCISlots.patch
> @@ -0,0 +1,81 @@
> +From d526e37bad2515cf91caa0e4ff3edaf41e45b5c2 Mon Sep 17 00:00:00 2001
> +From: Pavel Fedin <p.fedin at samsung.com>
> +Date: Wed, 9 Sep 2015 15:02:53 +0300
> +Subject: [PATCH] Ignore virtio-mmio disks in qemuAssignDevicePCISlots()
> +
> +Fixes the following error when attempting to add a disk with bus='virtio'
> +to a machine which actually supports virtio-mmio (caught with ARM virt):
> +
> +virtio disk cannot have an address of type 'virtio-mmio'
> +
> +The problem has been likely introduced by
> +e8d55172544c1fafe31a9e09346bdebca4f0d6f9. Before that
> +qemuAssignDevicePCISlots() was never called for ARM "virt" machine.
> +
> +Upstream-status: Accepted
> +[
> https://libvirt.org/git/?p=libvirt.git;a=commit;h=d526e37bad2515cf91caa0e4ff3edaf41e45b5c2
> ]
> +
> +Signed-off-by: Pavel Fedin <p.fedin at samsung.com>
> +---
> + src/qemu/qemu_command.c | 11 +++++++++--
> + src/qemu/qemu_command.h |  1 +
> + 2 files changed, 10 insertions(+), 2 deletions(-)
> +
> +diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> +index b56670c..25f57f2 100644
> +--- a/src/qemu/qemu_command.c
> ++++ b/src/qemu/qemu_command.c
> +@@ -2261,7 +2261,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
> +                 virDomainPCIAddressReserveNextSlot(addrs, &info, flags)
> < 0)
> +                 goto cleanup;
> +
> +-            if (qemuAssignDevicePCISlots(def, addrs) < 0)
> ++            if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0)
> +                 goto cleanup;
> +
> +             for (i = 1; i < addrs->nbuses; i++) {
> +@@ -2294,7 +2294,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
> +             if (qemuValidateDevicePCISlotsChipsets(def, qemuCaps, addrs)
> < 0)
> +                 goto cleanup;
> +
> +-            if (qemuAssignDevicePCISlots(def, addrs) < 0)
> ++            if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0)
> +                 goto cleanup;
> +
> +             for (i = 0; i < def->ncontrollers; i++) {
> +@@ -2426,6 +2426,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
> +  */
> + int
> + qemuAssignDevicePCISlots(virDomainDefPtr def,
> ++                         virQEMUCapsPtr qemuCaps,
> +                          virDomainPCIAddressSetPtr addrs)
> + {
> +     size_t i, j;
> +@@ -2618,6 +2619,12 @@ qemuAssignDevicePCISlots(virDomainDefPtr def,
> +             VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW)
> +             continue;
> +
> ++        /* Also ignore virtio-mmio disks if our machine allows them */
> ++        if (def->disks[i]->info.type ==
> ++            VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_MMIO &&
> ++            virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIRTIO_MMIO))
> ++            continue;
> ++
> +         if (def->disks[i]->info.type !=
> VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
> +             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                            _("virtio disk cannot have an address of type
> '%s'"),
> +diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h
> +index 767d31f..4aa7f2d 100644
> +--- a/src/qemu/qemu_command.h
> ++++ b/src/qemu/qemu_command.h
> +@@ -284,6 +284,7 @@ virDomainPCIAddressSetPtr
> qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
> +                                                         bool dryRun);
> +
> + int qemuAssignDevicePCISlots(virDomainDefPtr def,
> ++                             virQEMUCapsPtr qemuCaps,
> +                              virDomainPCIAddressSetPtr addrs);
> +
> + int qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr
> qemuCaps);
> +--
> +1.9.1
> +
> diff --git a/recipes-extended/libvirt/libvirt_1.2.19.bb
> b/recipes-extended/libvirt/libvirt_1.2.19.bb
> index df53d59..774eea4 100644
> --- a/recipes-extended/libvirt/libvirt_1.2.19.bb
> +++ b/recipes-extended/libvirt/libvirt_1.2.19.bb
> @@ -33,6 +33,7 @@ SRC_URI = "
> http://libvirt.org/sources/libvirt-${PV}.tar.gz;name=libvirt \
>             file://libvirt-use-pkg-config-to-locate-libcap.patch \
>             file://0001-to-fix-build-error.patch \
>             file://Revert-build-add-prefix-to-SYSTEMD_UNIT_DIR.patch \
> +
>  file://Ignore-virtio-mmio-disks-in-qemuAssignDevicePCISlots.patch \
>            "
>
>  SRC_URI[libvirt.md5sum] = "bc3ab1ba5b6fabd2e4516c70ddd4d97c"
> --
> 1.9.1
>
> --
> _______________________________________________
> meta-virtualization mailing list
> meta-virtualization at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-virtualization
>



-- 
"Thou shalt not follow the NULL pointer, for chaos and madness await thee
at its end"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-virtualization/attachments/20160407/350f0eed/attachment.html>


More information about the meta-virtualization mailing list