All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: Eduardo Habkost <ehabkost@redhat.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
	Juan Quintela <quintela@redhat.com>,
	qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] hw/core/qdev: Do not allow hot-plugging without hotplug controller
Date: Tue, 26 Sep 2017 16:33:47 +0200	[thread overview]
Message-ID: <3c522b57-9908-8c9f-09fd-24b49f0a8b0b@redhat.com> (raw)
In-Reply-To: <20170926134139.GM21016@localhost.localdomain>

On 26.09.2017 15:41, Eduardo Habkost wrote:
> On Tue, Sep 26, 2017 at 12:05:47PM +0200, Thomas Huth wrote:
>> On 21.09.2017 19:56, Eduardo Habkost wrote:
>>> On Thu, Sep 07, 2017 at 11:22:42AM +0200, Thomas Huth wrote:
>>>> qdev_unplug() bails out with an assertion if the user tries to device_del
>>>> a hot-plugged device that does not have a hotplug controller. Unfortunately,
>>>> our devices are all marked with hotpluggable = true by default (see the
>>>> device_class_init() function in qdev.c), so it currently can happen that
>>>> the user runs into this situation and QEMU gets terminated unexpectedly:
>>>>
>>>> $ qemu-system-aarch64 -M virt -nographic -nodefaults -monitor stdio -S
>>>> QEMU 2.10.50 monitor - type 'help' for more information
>>>> (qemu) device_add aux-to-i2c-bridge,id=x
>>>> (qemu) device_del x
>>>> **
>>>> ERROR:qdev-monitor.c:872:qdev_unplug: assertion failed: (hotplug_ctrl)
>>>> Aborted (core dumped)
>>>>
>>>> Hotplugging devices without a hotplug controller does not make much sense,
>>>> so we should disallow this during the device_add process already!
>>>>
>>>> Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
>>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>>
>>> I'm queueing this on machine-next.  We still want it even if we
>>> apply the patch that changes TYPE_DEVICE to hotpluggable=false by
>>> default, right?
>>
>> OK, just to be sure: Please de-queue it again. As you already mentioned
>> in another mail, there are situations where this does not work (e.g.
>> when one hot-pluggable device wants to instantiate another hot-pluggable
>> device internally).
> 
> I just dequeued it.
> 
>>
>> But maybe we could add the test for the availability of a hot-plug
>> controller to qmp_device_add() instead? (I haven't had a closer look at
>> that yet, though).
> 
> I'm unsure about this.  Now we know we have some devices that
> work without a hotplug controller, so what's the reason
> device_add must always require one?

The problem is that you can also "device_del" these devices again. And
qdev_unplug() currently has this piece of code in it:

    /* hotpluggable device MUST have HotplugHandler, if it doesn't
     * then something is very wrong with it */
    g_assert(hotplug_ctrl);

So if you do a device_add followed by a device_del with one of these
devices, QEMU aborts and kills your guest.

One solution is maybe to remove the assert here. OTOH, considering that
we have the assert in qdev_monitor.c->qdev_unplug(), adding a check for
the availability of a hotplug_ctrl in qdev_monitor.c->qmp_device_add()
currently sounds like the better solution to this problem to me. Anybody
got another opinion here? If not, I'll have a try and send a patch...

 Thomas

      reply	other threads:[~2017-09-26 14:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-07  9:22 [Qemu-devel] [PATCH] hw/core/qdev: Do not allow hot-plugging without hotplug controller Thomas Huth
2017-09-11 12:53 ` Igor Mammedov
2017-09-11 14:31   ` Thomas Huth
2017-09-11 15:06     ` Igor Mammedov
2017-09-12 18:05       ` Eduardo Habkost
2017-09-13  7:12         ` Igor Mammedov
2017-09-13 10:58 ` Peter Maydell
2017-09-21 17:56 ` Eduardo Habkost
2017-09-21 18:37   ` Thomas Huth
2017-09-26 10:05   ` Thomas Huth
2017-09-26 13:41     ` Eduardo Habkost
2017-09-26 14:33       ` Thomas Huth [this message]

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=3c522b57-9908-8c9f-09fd-24b49f0a8b0b@redhat.com \
    --to=thuth@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.