qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Markus Armbruster" <armbru@redhat.com>,
	qemu-arm@nongnu.org, qemu-ppc@nongnu.org,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Daniel P. Berrangé" <berrange@redhat.com>
Subject: [PATCH v2 02/15] hw/qdev: Introduce qdev_unrealize_and_unref()
Date: Fri,  3 Feb 2023 15:55:23 +0100	[thread overview]
Message-ID: <20230203145536.17585-3-philmd@linaro.org> (raw)
In-Reply-To: <20230203145536.17585-1-philmd@linaro.org>

Inspired-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/core/qdev.c         |  9 +++++++++
 include/hw/qdev-core.h | 20 ++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index d759c4602c..b9ef793d51 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -306,6 +306,15 @@ void qdev_unrealize(DeviceState *dev)
     object_property_set_bool(OBJECT(dev), "realized", false, &error_abort);
 }
 
+bool qdev_unrealize_and_unref(DeviceState *dev, Error **errp)
+{
+    bool ret;
+
+    ret = object_property_set_bool(OBJECT(dev), "realized", false, errp);
+    object_unref(OBJECT(dev));
+    return ret;
+}
+
 static int qdev_assert_realized_properly_cb(Object *obj, void *opaque)
 {
     DeviceState *dev = DEVICE(object_dynamic_cast(obj, TYPE_DEVICE));
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index fd11e9a82f..20b9220023 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -374,6 +374,8 @@ bool qdev_realize(DeviceState *dev, BusState *bus, Error **errp);
  * for the only reference to the child device to be held by the parent
  * via the child<> property, and so the reference-count-drop done here
  * would be incorrect. For that use case you want qdev_realize().
+ *
+ * Returns %true on success or %false if an error occured.
  */
 bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp);
 
@@ -397,6 +399,24 @@ bool qdev_realize_and_unref(DeviceState *dev, BusState *bus, Error **errp);
  * the life of the simulation and should not be unrealized and freed.
  */
 void qdev_unrealize(DeviceState *dev);
+
+/**
+ * qdev_unrealize_and_unref: Unrealize a device and drop a reference
+ * @dev: device to unrealize
+ * @errp: pointer to error object
+ *
+ * Unrealize @dev and drop a reference.
+ * This is like qdev_unrealize(), except the caller must hold a
+ * (private) reference, which is dropped on return regardless of
+ * success or failure.
+ *
+ * Warning: most devices in QEMU do not expect to be unrealized.  Only
+ * devices which are hot-unpluggable should be unrealized (as part of
+ * the unplugging process); all other devices are expected to last for
+ * the life of the simulation and should not be unrealized and freed.
+ */
+bool qdev_unrealize_and_unref(DeviceState *dev, Error **errp);
+
 void qdev_set_legacy_instance_id(DeviceState *dev, int alias_id,
                                  int required_for_version);
 HotplugHandler *qdev_get_bus_hotplug_handler(DeviceState *dev);
-- 
2.38.1



  parent reply	other threads:[~2023-02-03 14:56 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-03 14:55 [PATCH v2 00/15] hw: Use QOM alias properties and few QOM/QDev cleanups Philippe Mathieu-Daudé
2023-02-03 14:55 ` [PATCH v2 01/15] hw/pci/pcie_sriov: Replace fprintf(error_pretty) -> warn_reportf_err() Philippe Mathieu-Daudé
2023-09-25 10:24   ` Markus Armbruster
2023-02-03 14:55 ` Philippe Mathieu-Daudé [this message]
2023-09-25 10:30   ` [PATCH v2 02/15] hw/qdev: Introduce qdev_unrealize_and_unref() Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 03/15] linux-user/syscall: Do not open-code qdev_unrealize_and_unref() Philippe Mathieu-Daudé
2023-09-25 10:30   ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 04/15] hw/pci/pcie_sriov: " Philippe Mathieu-Daudé
2023-09-25 10:31   ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 05/15] hw/i386/sgx: Do not open-code qdev_realize_and_unref() Philippe Mathieu-Daudé
2023-02-03 14:55 ` [PATCH v2 06/15] hw/ppc/sam460ex: Correctly set MAL properties Philippe Mathieu-Daudé
2023-02-03 14:55 ` [PATCH v2 07/15] hw/arm/nrf51: Alias 'flash-size' QOM property in SoC object Philippe Mathieu-Daudé
2023-02-03 14:55 ` [PATCH v2 08/15] hw/arm/fsl-imx: Alias 'phy-num' " Philippe Mathieu-Daudé
2023-02-03 14:55 ` [PATCH v2 09/15] hw/usb/hcd-ohci: Include missing 'sysbus.h' header Philippe Mathieu-Daudé
2023-09-25 10:35   ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 10/15] hw/display/sm501: Embed OHCI QOM child in chipset Philippe Mathieu-Daudé
2023-02-03 16:16   ` BALATON Zoltan
2023-09-25 10:37   ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 11/15] hw/display/sm501: Alias 'dma-offset' QOM property in chipset object Philippe Mathieu-Daudé
2023-02-03 16:19   ` BALATON Zoltan
2023-09-25 10:37   ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 12/15] hw/display/sm501: Unify common QOM properties Philippe Mathieu-Daudé
2023-02-03 16:20   ` BALATON Zoltan
2023-02-27 13:36   ` Philippe Mathieu-Daudé
2023-02-27 17:01     ` BALATON Zoltan
2023-09-25 10:38       ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 13/15] hw/qdev: Remove DEFINE_PROP_DMAADDR() and 'hw/qdev-dma.h' Philippe Mathieu-Daudé
2023-09-25 10:48   ` Markus Armbruster
2023-09-25 11:03     ` Markus Armbruster
2023-09-25 16:41       ` Paolo Bonzini
2023-09-26  6:51         ` Markus Armbruster
2023-02-03 14:55 ` [PATCH v2 14/15] hw/mips: Declare all length properties as unsigned Philippe Mathieu-Daudé
2023-02-03 14:55 ` [RFC PATCH v2 15/15] hw/mips/itu: Pass SAAR using QOM link property Philippe Mathieu-Daudé
2023-09-19 12:35 ` [PATCH v2 00/15] hw: Use QOM alias properties and few QOM/QDev cleanups Philippe Mathieu-Daudé
2023-09-25 11:05   ` Markus Armbruster

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=20230203145536.17585-3-philmd@linaro.org \
    --to=philmd@linaro.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=pbonzini@redhat.com \
    --cc=qemu-arm@nongnu.org \
    --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).