From: Christian Borntraeger <borntraeger@de.ibm.com>
To: Peter Maydell <peter.maydell@linaro.org>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
qemu-block@nongnu.org, patches@linaro.org,
Alexander Graf <agraf@suse.de>,
Markus Armbruster <armbru@redhat.com>,
Cornelia Huck <cornelia.huck@de.ibm.com>
Subject: Re: [Qemu-devel] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives
Date: Mon, 08 Jun 2015 10:02:33 +0200 [thread overview]
Message-ID: <55754C19.8030100@de.ibm.com> (raw)
In-Reply-To: <1433434853-19229-1-git-send-email-peter.maydell@linaro.org>
Am 04.06.2015 um 18:20 schrieb Peter Maydell:
> 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?
Actually we will care about cross-version migration, the thing is that
2.4 will be the the first version that migrates all necessary pieces
like local interrupts for current Linux guests. 2.3 and before did work
from time to time but not reliable under load (1)
So migration between 2.3 and 2.4 was broken anyway and we intend to
care about migration compatiblity with 2.4 and later.
Now: The implicit defintion does only work for the non-ccw machine, due
to the limited aliasing capabilities
e.g.
# qemu-system-s390x -nographic -enable-kvm -machine s390-ccw .. -drive file=image,format=raw,id=d1 -device virtio-blk-ccw,drive=d1
fails
qemu-system-s390x: -drive file=image,format=raw,id=d1: No 's390-virtio-bus' bus found for device 'virtio-blk-s390'
but
# qemu-system-s390x -nographic -enable-kvm -machine s390-ccw .. -drive file=image,format=raw,id=d1,if=none -device virtio-blk-ccw,drive=d1
^^^^^^^
works
So I would prefer to not have this workaround and doing
index c480f64..7627d57 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -976,17 +976,6 @@ DriveInfo *drive_new(QemuOpts *all_opts, BlockInterfaceType block_default_type)
goto fail;
}
- if (type == IF_VIRTIO && !done_orphan_check
- && arch_type == QEMU_ARCH_S390X) {
- /* Virtio drives created on the command line get an implicit device
- * created for them. For non-s390x command line drives, the creation
- * of the implicit device is deferred to drive_check_orphaned. (S390x
- * is special-cased purely for backwards compatibility.)
- * Drives created via the monitor (hotplugged) do not get the
- * magic implicit device created for them.
- */
- create_implicit_virtio_device(qdict_get_str(bs_opts, "id"), devaddr);
- }
filename = qemu_opt_get(legacy_opts, "file");
actually enables the first command line to work as well.
So lets get rid of the s390 special handling (but I really appreciate that
you cared about s390)
(1) storage key migration is still missing but newer Linux guests do
not care. Lets see if we can provide this before 2.4
>
> 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(-)
>
next prev parent reply other threads:[~2015-06-08 8:02 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-04 16:20 [Qemu-devel] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives Peter Maydell
2015-06-04 16:20 ` [Qemu-devel] [PATCH 1/4] blockdev: Factor out create_implicit_virtio_device Peter Maydell
2015-06-04 16:20 ` [Qemu-devel] [PATCH 2/4] blockdev: Don't call create_implicit_virtio_device() when it has no effect Peter Maydell
2015-06-04 16:20 ` [Qemu-devel] [PATCH 3/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives Peter Maydell
2015-06-04 16:20 ` [Qemu-devel] [PATCH 4/4] hw/arm/virt: Make block devices default to virtio Peter Maydell
2015-06-08 8:02 ` Christian Borntraeger [this message]
2015-06-08 8:18 ` [Qemu-devel] [PATCH 0/4] blockdev: Defer creation of implicit PCI devices for IF_VIRTIO drives Christian Borntraeger
2015-06-08 12:37 ` Peter Maydell
2015-06-08 14:18 ` Markus Armbruster
2015-06-08 14:53 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55754C19.8030100@de.ibm.com \
--to=borntraeger@de.ibm.com \
--cc=agraf@suse.de \
--cc=armbru@redhat.com \
--cc=cornelia.huck@de.ibm.com \
--cc=kwolf@redhat.com \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).