When using JSON syntax for -device, -set option can not find device
specified in JSON by id field. The following commandline is an example:
$ qemu-system-x86_64 -device '{"id":"foo"}' -set device.foo.bar=1
qemu-system-x86_64: -set device.foo.bar=1: there is no device "foo" defined
The patch adds device opts to device opts list when a device opts get
parsed.
Signed-off-by: MkfsSion <mkfssion@mkfssion.com>
---
softmmu/vl.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 620a1f1367..0dd5acbc1a 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -3400,6 +3400,8 @@ void qemu_init(int argc, char **argv, char **envp)
loc_save(&opt->loc);
assert(opt->opts != NULL);
QTAILQ_INSERT_TAIL(&device_opts, opt, next);
+ qemu_opts_from_qdict(qemu_find_opts_err("device", &error_fatal),
+ opt->opts, &error_fatal);
} else {
if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
optarg, true)) {
--
2.34.1
Cc'ing Markus.
On 12/20/21 09:45, MkfsSion wrote:
> When using JSON syntax for -device, -set option can not find device
> specified in JSON by id field. The following commandline is an example:
>
> $ qemu-system-x86_64 -device '{"id":"foo"}' -set device.foo.bar=1
> qemu-system-x86_64: -set device.foo.bar=1: there is no device "foo" defined
>
> The patch adds device opts to device opts list when a device opts get
> parsed.
>
> Signed-off-by: MkfsSion <mkfssion@mkfssion.com>
BTW per:
https://www.qemu.org/docs/master/devel/submitting-a-patch.html#patch-emails-must-include-a-signed-off-by-line
"Please use your real name to sign a patch (not an alias or acronym)."
> ---
> softmmu/vl.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index 620a1f1367..0dd5acbc1a 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -3400,6 +3400,8 @@ void qemu_init(int argc, char **argv, char **envp)
> loc_save(&opt->loc);
> assert(opt->opts != NULL);
> QTAILQ_INSERT_TAIL(&device_opts, opt, next);
> + qemu_opts_from_qdict(qemu_find_opts_err("device", &error_fatal),
> + opt->opts, &error_fatal);
> } else {
> if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
> optarg, true)) {
Sorry, the patch is not well tested and it causes duplicate devices creation. I have send another patch to the mailing list to fix the issue.
On 2021/12/21 16:25, Philippe Mathieu-Daudé wrote:
> Cc'ing Markus.
>
> On 12/20/21 09:45, MkfsSion wrote:
>> When using JSON syntax for -device, -set option can not find device
>> specified in JSON by id field. The following commandline is an example:
>>
>> $ qemu-system-x86_64 -device '{"id":"foo"}' -set device.foo.bar=1
>> qemu-system-x86_64: -set device.foo.bar=1: there is no device "foo" defined
>>
>> The patch adds device opts to device opts list when a device opts get
>> parsed.
>>
>> Signed-off-by: MkfsSion <mkfssion@mkfssion.com>
>
> BTW per:
> https://www.qemu.org/docs/master/devel/submitting-a-patch.html#patch-emails-must-include-a-signed-off-by-line
> "Please use your real name to sign a patch (not an alias or acronym)."
The issue has been fixed in new patch.
>
>> ---
>> softmmu/vl.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/softmmu/vl.c b/softmmu/vl.c
>> index 620a1f1367..0dd5acbc1a 100644
>> --- a/softmmu/vl.c
>> +++ b/softmmu/vl.c
>> @@ -3400,6 +3400,8 @@ void qemu_init(int argc, char **argv, char **envp)
>> loc_save(&opt->loc);
>> assert(opt->opts != NULL);
>> QTAILQ_INSERT_TAIL(&device_opts, opt, next);
>> + qemu_opts_from_qdict(qemu_find_opts_err("device", &error_fatal),
>> + opt->opts, &error_fatal);
>> } else {
>> if (!qemu_opts_parse_noisily(qemu_find_opts("device"),
>> optarg, true)) {
>
© 2016 - 2026 Red Hat, Inc.