All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Akihiko Odaki <akihiko.odaki@daynix.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	qemu-devel@nongnu.org
Subject: Re: [PATCH v2] qdev: Report an error for machine without HotplugHandler
Date: Mon, 11 Dec 2023 07:51:00 +0100	[thread overview]
Message-ID: <87h6kpgrl7.fsf@pond.sub.org> (raw)
In-Reply-To: <20231210-bus-v2-1-34ebf5726fa0@daynix.com> (Akihiko Odaki's message of "Sun, 10 Dec 2023 14:34:36 +0900")

Akihiko Odaki <akihiko.odaki@daynix.com> writes:

> The HotplugHandler of the machine will be used when the parent bus does
> not exist, but the machine may not have one. Report an error in such a
> case instead of aborting.
>
> Fixes: 7716b8ca74 ("qdev: HotplugHandler: Add support for unplugging BUS-less devices")
> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>

Do you have a reproducer for the crash?

> ---
> Changes in v2:
> - Fixed indention.
> - Link to v1: https://lore.kernel.org/r/20231202-bus-v1-1-f7540e3a8d62@daynix.com
> ---
>  system/qdev-monitor.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c
> index a13db763e5..5fe5d49c20 100644
> --- a/system/qdev-monitor.c
> +++ b/system/qdev-monitor.c
> @@ -927,9 +927,16 @@ void qdev_unplug(DeviceState *dev, Error **errp)
   void qdev_unplug(DeviceState *dev, Error **errp)
   {
       DeviceClass *dc = DEVICE_GET_CLASS(dev);
       HotplugHandler *hotplug_ctrl;
       HotplugHandlerClass *hdc;
       Error *local_err = NULL;

       if (qdev_unplug_blocked(dev, errp)) {
           return;
       }

       if (dev->parent_bus && !qbus_is_hotpluggable(dev->parent_bus)) {
           error_setg(errp, QERR_BUS_NO_HOTPLUG, dev->parent_bus->name);
           return;
       }

       if (!dc->hotpluggable) {
           error_setg(errp, QERR_DEVICE_NO_HOTPLUG,
                      object_get_typename(OBJECT(dev)));
           return;
       }

       if (!migration_is_idle() && !dev->allow_unplug_during_migration) {
           error_setg(errp, "device_del not allowed while migrating");
           return;
       }

>      qdev_hot_removed = true;
>  
>      hotplug_ctrl = qdev_get_hotplug_handler(dev);
> -    /* hotpluggable device MUST have HotplugHandler, if it doesn't
> -     * then something is very wrong with it */
> -    g_assert(hotplug_ctrl);
> +    if (!hotplug_ctrl) {
> +        /*
> +         * hotpluggable bus MUST have HotplugHandler, if it doesn't
> +         * then something is very wrong with it
> +         */
> +        assert(!dev->parent_bus);
> +
> +        error_setg(errp, "The machine does not support hotplugging for a device without parent bus");
> +        return;
> +    }

Extended version of my question above: what are the devices where
qdev_get_hotplug_handler(dev) returns null here?

>  
>      /* If device supports async unplug just request it to be done,
>       * otherwise just remove it synchronously */
>
> ---
> base-commit: 4705fc0c8511d073bee4751c3c974aab2b10a970
> change-id: 20231202-bus-75a454c5d959
>
> Best regards,



  reply	other threads:[~2023-12-11  6:51 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-10  5:34 [PATCH v2] qdev: Report an error for machine without HotplugHandler Akihiko Odaki
2023-12-11  6:51 ` Markus Armbruster [this message]
2023-12-13  9:50   ` Akihiko Odaki
2023-12-18 14:02     ` Markus Armbruster
2023-12-19 12:08       ` Akihiko Odaki
2023-12-20  7:53         ` Markus Armbruster
2023-12-20 16:46           ` Zhao Liu
2023-12-21  6:34             ` Markus Armbruster
2023-12-21  6:36             ` Akihiko Odaki
2023-12-21  8:49               ` Markus Armbruster
2023-12-21  9:36                 ` Akihiko Odaki
2024-02-18  5:47           ` Akihiko Odaki

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=87h6kpgrl7.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=akihiko.odaki@daynix.com \
    --cc=berrange@redhat.com \
    --cc=eduardo@habkost.net \
    --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 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.