[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 0/4] blockdev: Defer creation of implicit PCI device
From: |
Peter Maydell |
Subject: |
[Qemu-block] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives |
Date: |
Thu, 4 Jun 2015 17:20:49 +0100 |
blockdev.c will create implicit virtio-blk-* devices for IF_VIRTIO
drives. I want to turn this on for the ARM virt board (now it has PCI),
so that users can use shorter and more comprehensible command lines.
Unfortunately, the code as it stands will always create an implicit
device, which means that setting the virt block_default_type to IF_VIRTIO
would break existing command lines like:
-drive file=arm-wheezy.qcow2,id=foo
-device virtio-blk-pci,drive=foo
because the creation of the drive causes us to create an implied
virtio-blk-pci which steals the drive, and then the explicit
device creation fails because 'foo' is already in use.
This patchset fixes this problem by deferring the creation of the
implicit devices to drive_check_orphaned(), which means we can do
it only for the drives which haven't been explicitly connected to
a device by the user.
The slight downside of deferral is that it is effectively rearranging
the order in which the devices are created, which means they will
end up in different PCI slots, etc. We can get away with this for PCI,
because at the moment the only machines which set their block_default_type
to IF_VIRTIO are the S390X ones. I have special-cased S390X to retain
the old behaviour, which is a bit ugly but functional. If S390X doesn't
care about cross-version migration we can probably drop that and
just have everything defer. S390X people?
The code in master didn't seem to take much account of the possibility
of hotplug -- if the user created a drive via the monitor we would
apparently try to create the implicit drive, but in fact not do so
because vl.c had already done device creation long before. I've included
a patch that makes it more explicit that hotplug does not get you the
magic implicit devices.
The last patch is the oneliner to enable the default for virt once
the underlying stuff lets us do this without breaking existing user
command lines.
Peter Maydell (4):
blockdev: Factor out create_implicit_virtio_device
blockdev: Don't call create_implicit_virtio_device() when it has no
effect
blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives
hw/arm/virt: Make block devices default to virtio
blockdev.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++------------
hw/arm/virt.c | 1 +
2 files changed, 59 insertions(+), 14 deletions(-)
--
1.9.1
- [Qemu-block] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives,
Peter Maydell <=
- [Qemu-block] [PATCH 4/4] hw/arm/virt: Make block devices default to virtio, Peter Maydell, 2015/06/04
- [Qemu-block] [PATCH 2/4] blockdev: Don't call create_implicit_virtio_device() when it has no effect, Peter Maydell, 2015/06/04
- [Qemu-block] [PATCH 1/4] blockdev: Factor out create_implicit_virtio_device, Peter Maydell, 2015/06/04
- [Qemu-block] [PATCH 3/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives, Peter Maydell, 2015/06/04
- Re: [Qemu-block] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives, Christian Borntraeger, 2015/06/08
- Re: [Qemu-block] [Qemu-devel] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives, Markus Armbruster, 2015/06/08