From: Anthony Liguori <anthony@codemonkey.ws>
To: Alexander Graf <agraf@suse.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 01/16] qdev: fix hot-unplug
Date: Fri, 03 Feb 2012 11:12:29 -0600 [thread overview]
Message-ID: <4F2C157D.7020700@codemonkey.ws> (raw)
In-Reply-To: <FAEC8146-F35A-4587-B1D1-DC2F3DB92CDF@suse.de>
On 02/03/2012 10:57 AM, Alexander Graf wrote:
>
>
> On 03.02.2012, at 17:37, Anthony Liguori<anthony@codemonkey.ws> wrote:
>
>> On 02/02/2012 01:07 PM, Alexander Graf wrote:
>>>
>>> On 02.02.2012, at 20:01, Anthony Liguori wrote:
>>>
>>>> On 02/02/2012 11:29 AM, Paolo Bonzini wrote:
>>>>> On 02/02/2012 06:03 PM, Anthony Liguori wrote:
>>>>>>>
>>>>>>
>>>>>> Is this still needed with qom-upstream.14? I fixed a bug on .14 that
>>>>>> involved child properties that was making device-del sometimes fail.
>>>>>
>>>>> Not sure, I tried with .13 but, from the look of it, it should still be there.
>>>>> Regarding the .13->.14 diff:
>>>>>
>>>>> - you need QTAILQ_FOREACH_SAFE in object_property_del_child.
>>>>
>>>> Ack.
>>>>
>>>>>
>>>>> - you need to check for the existence of the non-aliased name when accessing the
>>>>> alias table, because s390 does not have PCI.
>>>>
>>>> I don't think that's the right strategy as it means that s390 only works if we don't include the PCI objects in the build (regardless of whether it uses PCI). This would be defeated if/when we move to having all device objects in a single shared library used by all of the qemu executables.
>>>>
>>>> I'd prefer to just drop the aliases for s390. I don't see a lot of value in it and I don't think there are tons of s390 users that will be affected.
>>>
>>> The reason for the aliases is to make -drive and -net work. If you have alternatives to aliases there, I'm happy to go with them.
>>
>> Um, but I see (in s390-virtio.c):
>>
>>
>> for(i = 0; i< nb_nics; i++) {
>> NICInfo *nd =&nd_table[i];
>> DeviceState *dev;
>>
>> if (!nd->model) {
>> nd->model = g_strdup("virtio");
>> }
>>
>> if (strcmp(nd->model, "virtio")) {
>> fprintf(stderr, "S390 only supports VirtIO nics\n");
>> exit(1);
>> }
>>
>> dev = qdev_create((BusState *)s390_bus, "virtio-net-s390");
>> qdev_set_nic_properties(dev, nd);
>> qdev_init_nofail(dev);
>> }
>>
>> /* Create VirtIO disk drives */
>> for(i = 0; i< MAX_BLK_DEVS; i++) {
>> DriveInfo *dinfo;
>> DeviceState *dev;
>>
>> dinfo = drive_get(IF_IDE, 0, i);
>> if (!dinfo) {
>> continue;
>> }
>>
>> dev = qdev_create((BusState *)s390_bus, "virtio-blk-s390");
>> qdev_prop_set_drive_nofail(dev, "drive", dinfo->bdrv);
>> qdev_init_nofail(dev);
>> }
>>
>> So s390 totally ignores the -drive if
>
> Nope, since virtio drives aren't handled through the IF_ legacy stuff but through qden instantiation. We only fake virtio disks for -hda here (which should be replaced by a default_virtio option in the machine config).
>
>> parameter and will only accept virtio for -net.
>
> It only supports virtio at all, yes. No MMIO there ;).
>
>>
>> From what I can tell, it's not an issue. But if we need it, we can do:
>>
>> diff --git a/arch_init.h b/arch_init.h
>> index 828256c..bfbd9e1 100644
>> --- a/arch_init.h
>> +++ b/arch_init.h
>> @@ -32,4 +32,9 @@ int tcg_available(void);
>> int kvm_available(void);
>> int xen_available(void);
>>
>> +static inline int target_get_arch(void)
>> +{
>> + return arch_type;
>
> We could also have a machine type field that could be PCI or S390, right? I somehow don't like globals.
>
> And just because it's s390 doesn't tell us anything. Maybe someone clever will find a way to expose PCI in a later machine type and use that for all devices?
>
> The same thing goes for arm and their mmio virtio too btw.
Right, you're just pointing out though that the current code is dumb. I full
heartedly agree with you :-)
If you added PCI to the build for s390, aliases wouldn't do what you expect anymore.
>
>> +}
>> +
>> #endif
>> diff --git a/blockdev.c b/blockdev.c
>> index 7e4c548..caa9205 100644
>> --- a/blockdev.c
>> +++ b/blockdev.c
>> @@ -565,7 +565,15 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
>> case IF_VIRTIO:
>> /* add virtio block device */
>> opts = qemu_opts_create(qemu_find_opts("device"), NULL, 0);
>> - qemu_opt_set(opts, "driver", "virtio-blk");
>> + switch(target_get_arch()) {
>> + case QEMU_ARCH_S390X:
>> + qemu_opt_set(opts, "driver", "virtio-blk-s390");
>> + break;
>> + default:
>> + qemu_opt_set(opts, "driver", "virtio-blk-pci");
>> + break;
>> + }
>> +
>> qemu_opt_set(opts, "drive", dinfo->id);
>> if (devaddr)
>> qemu_opt_set(opts, "addr", devaddr);
>> diff --git a/blockdev.c b/blockdev.c
>> index 7e4c548..caa9205 100644
>> --- a/blockdev.c
>> +++ b/blockdev.c
>> @@ -565,7 +565,15 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
>> case IF_VIRTIO:
>> /* add virtio block device */
>> opts = qemu_opts_create(qemu_find_opts("device"), NULL, 0);
>> - qemu_opt_set(opts, "driver", "virtio-blk");
>> + switch(target_get_arch()) {
>> + case QEMU_ARCH_S390X:
>> + qemu_opt_set(opts, "driver", "virtio-blk-s390");
>> + break;
>> + default:
>> + qemu_opt_set(opts, "driver", "virtio-blk-pci");
>> + break;
>> + }
>> +
>> qemu_opt_set(opts, "drive", dinfo->id);
>> if (devaddr)
>> qemu_opt_set(opts, "addr", devaddr);
>>
>>
>> Can you confirm what we actually need here?
>
> Every time you grep for virtio-xxx-pci in the code without an s390 branch it's wrong. Pretty simple, eh? :)
Okay, I'm going to go with this change as this is the only place that it seems
to exist.
Regards,
Anthony Liguori
> Alex
>
>>
>> Regards,
>>
>> Anthony Liguori
>>
>>>
>>>
>>> Alex
>>>
>>>
>>
>
next prev parent reply other threads:[~2012-02-03 17:12 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-02 16:45 [Qemu-devel] [PATCH 00/16] access qdev properties via QOM Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 01/16] qdev: fix hot-unplug Paolo Bonzini
2012-02-02 17:03 ` Anthony Liguori
2012-02-02 17:29 ` Paolo Bonzini
2012-02-02 19:01 ` Anthony Liguori
2012-02-02 19:07 ` Alexander Graf
2012-02-02 20:03 ` Anthony Liguori
2012-02-02 20:31 ` Alexander Graf
2012-02-03 16:37 ` Anthony Liguori
2012-02-03 16:57 ` Alexander Graf
2012-02-03 17:12 ` Anthony Liguori [this message]
2012-02-03 14:27 ` Anthony Liguori
2012-02-04 0:27 ` Paolo Bonzini
2012-02-04 3:03 ` Anthony Liguori
2012-02-04 6:51 ` Paolo Bonzini
2012-02-04 17:13 ` Anthony Liguori
2012-02-02 16:45 ` [Qemu-devel] [PATCH 02/16] qom: store object with correct type in interface links Paolo Bonzini
2012-02-02 17:05 ` Anthony Liguori
2012-02-03 12:10 ` Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 03/16] qom: do not include qdev header file Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 04/16] qom: add QObject-based property get/set wrappers Paolo Bonzini
2012-02-02 19:06 ` Anthony Liguori
2012-02-02 19:21 ` Andreas Färber
2012-02-02 20:58 ` Anthony Liguori
2012-02-02 19:24 ` Paolo Bonzini
2012-02-02 19:29 ` Paolo Bonzini
2012-02-02 20:01 ` Anthony Liguori
2012-02-02 19:36 ` Anthony Liguori
2012-02-02 20:08 ` Paolo Bonzini
2012-02-02 20:59 ` Anthony Liguori
2012-02-02 16:45 ` [Qemu-devel] [PATCH 05/16] qom: add property get/set wrappers for C types Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 06/16] qdev: remove direct calls to print/parse Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 07/16] qdev: allow reusing get/set for legacy property Paolo Bonzini
2012-02-02 22:38 ` Andreas Färber
2012-02-03 8:11 ` Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 08/16] qdev: remove parse method for string properties Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 09/16] qdev: remove parse/print methods for mac properties Paolo Bonzini
2012-02-02 20:05 ` Anthony Liguori
2012-02-02 16:45 ` [Qemu-devel] [PATCH 10/16] qdev: make the non-legacy pci address property accept an integer Paolo Bonzini
2012-02-02 20:07 ` Anthony Liguori
2012-02-02 20:19 ` Paolo Bonzini
2012-02-03 14:14 ` Anthony Liguori
2012-02-04 0:21 ` Paolo Bonzini
2012-02-04 0:43 ` Paolo Bonzini
2012-02-04 3:00 ` Anthony Liguori
2012-02-04 6:42 ` Paolo Bonzini
2012-02-04 7:13 ` Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 11/16] qdev: remove parse/print methods for pointer properties Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 12/16] qdev: let QOM free properties Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 13/16] qdev: fix off-by-one Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 14/16] qdev: access properties via QOM Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 15/16] qdev: inline qdev_prop_set into qdev_prop_set_ptr Paolo Bonzini
2012-02-02 16:45 ` [Qemu-devel] [PATCH 16/16] qdev: initialize properties via QOM Paolo Bonzini
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=4F2C157D.7020700@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=agraf@suse.de \
--cc=pbonzini@redhat.com \
--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).