From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: [PULL 12/16] qdev: Reject chardev property override
Date: Tue, 23 Jun 2020 16:23:22 +0200 [thread overview]
Message-ID: <20200623142326.2349416-13-armbru@redhat.com> (raw)
In-Reply-To: <20200623142326.2349416-1-armbru@redhat.com>
qdev_prop_set_chr() screws up when the property already has a non-null
value: it neglects to release the old value. Both the old and the new
backend become attached to the same device. Unlike for block devices
(see previous commit), this can't be observed from the monitor (I
think).
Example: -serial null -chardev null,id=chr0 -global isa-serial.chardev=chr0
Special case: attempting to use the same backend both times crashes:
$ qemu-system-x86_64 --nodefaults -serial null -global isa-serial.chardev=serial0
Unexpected error in qemu_chr_fe_init() at /work/armbru/qemu/chardev/char-fe.c:220:
qemu-system-x86_64: Device 'serial0' is in use
Aborted (core dumped)
Yet another example: -device with multiple chardev=... (but not
device_add, which silently drops all but the last duplicate property).
Perhaps chardev property override could be made to work. Perhaps it
should. I can't afford the time to figure this out now. What I can
do reject usage that leaves backends in unhealthy states. For what
it's worth, we've long done the same for netdev properties.
Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20200622094227.1271650-13-armbru@redhat.com>
---
hw/core/qdev-properties-system.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c
index 6b5fc59901..2561fa09a8 100644
--- a/hw/core/qdev-properties-system.c
+++ b/hw/core/qdev-properties-system.c
@@ -244,6 +244,14 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
return;
}
+ /*
+ * TODO Should this really be an error? If no, the old value
+ * needs to be released before we store the new one.
+ */
+ if (!check_prop_still_unset(dev, name, be->chr, str, errp)) {
+ return;
+ }
+
if (!*str) {
g_free(str);
be->chr = NULL;
--
2.26.2
next prev parent reply other threads:[~2020-06-23 14:35 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-23 14:23 [PULL 00/16] Qdev patches for 2020-06-23 Markus Armbruster
2020-06-23 14:23 ` [PULL 01/16] iotests/172: Include "info block" in test output Markus Armbruster
2020-06-23 14:23 ` [PULL 02/16] iotests/172: Cover empty filename and multiple use of drives Markus Armbruster
2020-06-23 14:23 ` [PULL 03/16] iotests/172: Cover -global floppy.drive= Markus Armbruster
2020-06-23 14:23 ` [PULL 04/16] fdc: Reject clash between -drive if=floppy and -global isa-fdc Markus Armbruster
2020-06-23 14:23 ` [PULL 05/16] fdc: Open-code fdctrl_init_isa() Markus Armbruster
2020-06-23 14:23 ` [PULL 06/16] fdc: Deprecate configuring floppies with -global isa-fdc Markus Armbruster
2020-06-23 14:23 ` [PULL 07/16] docs/qdev-device-use.txt: Update section "Default Devices" Markus Armbruster
2020-06-23 14:23 ` [PULL 08/16] blockdev: Deprecate -drive with bogus interface type Markus Armbruster
2020-06-23 14:23 ` [PULL 09/16] qdev: Eliminate get_pointer(), set_pointer() Markus Armbruster
2020-06-23 14:23 ` [PULL 10/16] qdev: Improve netdev property override error a bit Markus Armbruster
2020-06-23 14:23 ` [PULL 11/16] qdev: Reject drive property override Markus Armbruster
2020-06-23 14:23 ` Markus Armbruster [this message]
2020-06-23 14:23 ` [PULL 13/16] qdev: Make qdev_prop_set_drive() match the other helpers Markus Armbruster
2020-06-23 14:23 ` [PULL 14/16] arm/aspeed: Drop aspeed_board_init_flashes() parameter @errp Markus Armbruster
2020-06-23 14:23 ` [PULL 15/16] sd/pxa2xx_mmci: Don't crash on pxa2xx_mmci_init() error Markus Armbruster
2020-06-23 14:23 ` [PULL 16/16] sd/milkymist-memcard: Fix error API violation Markus Armbruster
2020-06-23 14:40 ` [PULL 00/16] Qdev patches for 2020-06-23 no-reply
2020-06-25 12:39 ` Peter Maydell
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=20200623142326.2349416-13-armbru@redhat.com \
--to=armbru@redhat.com \
--cc=marcandre.lureau@redhat.com \
--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).