From: Daniel Henrique Barboza <danielhb413@gmail.com>
To: "Philippe Mathieu-Daudé" <philmd@redhat.com>, qemu-devel@nongnu.org
Cc: qemu-ppc@nongnu.org, Markus Armbruster <armbru@redhat.com>,
david@gibson.dropbear.id.au
Subject: Re: [PATCH 1/1] spapr_vscsi: do not allow device hotplug
Date: Fri, 21 Aug 2020 11:08:04 -0300 [thread overview]
Message-ID: <e9b2ce95-d920-24e3-14f7-cb41a5ce3caf@gmail.com> (raw)
In-Reply-To: <7f6ab4e6-42b1-3de4-5893-2ef09fc9dd26@redhat.com>
On 8/21/20 8:08 AM, Philippe Mathieu-Daudé wrote:
> Cc'ing Markus
>
> On 8/20/20 9:06 PM, Daniel Henrique Barboza wrote:
>> We do not implement hotplug in the vscsi bus, but we forgot to
>> tell qdev about it. The result is that users are able to hotplug
>> devices in the vscsi bus, the devices appear in qdev, but they
>> aren't usable by the guest OS unless the user reboots it first.
>>
>> Setting qbus hotplug_handler to NULL will tell qdev-monitor, via
>> qbus_is_hotpluggable(), that we do not support hotplug operations
>> in spapr_vscsi.
>>
>> Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1862059
>>
>> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
>> ---
>> hw/scsi/spapr_vscsi.c | 3 +++
>> 1 file changed, 3 insertions(+)
>>
>> diff --git a/hw/scsi/spapr_vscsi.c b/hw/scsi/spapr_vscsi.c
>> index d17dc03c73..57f0a1336f 100644
>> --- a/hw/scsi/spapr_vscsi.c
>> +++ b/hw/scsi/spapr_vscsi.c
>> @@ -1219,6 +1219,9 @@ static void spapr_vscsi_realize(SpaprVioDevice *dev, Error **errp)
>>
>> scsi_bus_new(&s->bus, sizeof(s->bus), DEVICE(dev),
>> &vscsi_scsi_info, NULL);
>> +
>> + /* ibmvscsi SCSI bus does not allow hotplug. */
>> + qbus_set_hotplug_handler(BUS(&s->bus), NULL);
>
> Can't this be a problem later in DeviceClass::unrealize()?
Not as far as I've tested. A call to qbus_set_hotplug_handler(bus,NULL)
after setting it to NULL isn't breaking anything either (just tested).
I verified before sending the patch that setting hotplug_handler to
NULL is done in some unrealize() calls in buses, but not on devices.
And I'm not sure which instance would cause an unrealize() in the
device to fail if the hotplug_handler of the bus is NULL. As far as
I'm concerned this shouldn't be happening in our case here, where we're
not dealing with hotplug devices in the bus at all.
Which potential problems are you referring to?
>
> I was expecting something like, overwriting the parent bus type:
>
> -- >8 --
> @@ -1271,6 +1271,7 @@ static void spapr_vscsi_class_init(ObjectClass
> *klass, void *data)
> DeviceClass *dc = DEVICE_CLASS(klass);
> SpaprVioDeviceClass *k = VIO_SPAPR_DEVICE_CLASS(klass);
>
> + k->bus_type = NULL; /* ibmvscsi SCSI bus does not allow hotplug. */
> k->realize = spapr_vscsi_realize;
> k->reset = spapr_vscsi_reset;
> k->devnode = spapr_vscsi_devnode;
> ---
spapr_vscsi is not a bus, is an interface. Setting NULL to bus_type in spapr_vio
breaks guest init:
qemu-system-ppc64: /home/danielhb/qemu/hw/core/qdev.c:102: qdev_set_parent_bus: Assertion `dc->bus_type && object_dynamic_cast(OBJECT(bus), dc->bus_type)' failed.
Aborted
I'm not so sure this would be better than what I'm doing either. qdev_device_add()
calls qbus_is_hotpluggable() to see if the chosen bus allows hotplug. This
function verifies if bus->hotplug_handler is NULL. What I'm doing is simply
setting hotplug_handler to NULL in the SCSI bus instance that belongs to
spapr_vscsi. As far as I understand this is a valid use of the qdev API - I
should be able to set hotplug_handler to NULL if I don't want devices being
hotplugged in the bus I'm instantiating. Either that, or qbus_is_hotpluggable()
must check for something else that I can safely turn off.
Thanks,
DHB
>
>> }
>>
>> void spapr_vscsi_create(SpaprVioBus *bus)
>>
>
next prev parent reply other threads:[~2020-08-21 14:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-20 19:06 [PATCH 1/1] spapr_vscsi: do not allow device hotplug Daniel Henrique Barboza
2020-08-20 23:21 ` David Gibson
2020-08-21 11:08 ` Philippe Mathieu-Daudé
2020-08-21 14:08 ` Daniel Henrique Barboza [this message]
2020-08-21 14:12 ` Philippe Mathieu-Daudé
2020-08-21 14:49 ` Daniel Henrique Barboza
2020-08-25 6:27 ` Markus Armbruster
2020-08-25 9:36 ` David Gibson
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=e9b2ce95-d920-24e3-14f7-cb41a5ce3caf@gmail.com \
--to=danielhb413@gmail.com \
--cc=armbru@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=philmd@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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).