On Sat, Nov 21, 2020 at 5:24 PM Yuri Benditovich <
yuri.benditov...@daynix.com> wrote:

>
>
> On Fri, Nov 20, 2020 at 2:58 PM Markus Armbruster <arm...@redhat.com>
> wrote:
>
>> Andrew Melnichenko <and...@daynix.com> writes:
>>
>> > Ping
>> >
>> > On Thu, Jul 16, 2020 at 6:26 AM <and...@daynix.com> wrote:
>> >
>> >> From: Andrew Melnychenko <and...@daynix.com>
>> >>
>> >> There is an issue, that netdev can't be removed if it was added using
>> hmp.
>> >> The bug appears after 08712fcb851034228b61f75bd922863a984a4f60 commit.
>> >> It happens because of unclear QemuOpts that was created during
>> >> hmp_netdev_add(), now it uses qmp analog function -
>> >> qmp_marshal_netdev_add().
>> >>
>> >> Signed-off-by: Andrew Melnychenko <and...@daynix.com>
>> >> ---
>> >>  monitor/hmp-cmds.c | 15 +++------------
>> >>  1 file changed, 3 insertions(+), 12 deletions(-)
>> >>
>> >> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
>> >> index 2b0b58a336..b747935687 100644
>> >> --- a/monitor/hmp-cmds.c
>> >> +++ b/monitor/hmp-cmds.c
>> >> @@ -1597,19 +1597,10 @@ void hmp_migrate(Monitor *mon, const QDict
>> *qdict)
>> >>  void hmp_netdev_add(Monitor *mon, const QDict *qdict)
>> >>  {
>> >>      Error *err = NULL;
>> >> -    QemuOpts *opts;
>> >> -
>> >> -    opts = qemu_opts_from_qdict(qemu_find_opts("netdev"), qdict,
>> &err);
>> >> -    if (err) {
>> >> -        goto out;
>> >> -    }
>> >> +    QDict *non_constant_dict = qdict_clone_shallow(qdict);
>> >>
>> >> -    netdev_add(opts, &err);
>> >> -    if (err) {
>> >> -        qemu_opts_del(opts);
>> >> -    }
>> >> -
>> >> -out:
>> >> +    qmp_marshal_netdev_add(non_constant_dict, NULL, &err);
>> >> +    qobject_unref(non_constant_dict);
>> >>      hmp_handle_error(mon, err);
>> >>  }
>>
>> qmp_marshal_netdev_add() uses the QObject input visitor, which feels
>> wrong for HMP input.
>>
>> What exactly is the problem you're trying to solve?  Can you show us a
>> reproducer?
>>
>> The problem was found during work on hotplug/unplug problems with q35
> run q35 VM with netdev and hotpluggable nic (virtio or e1000e)
> unplug the nic (device_del)
> delete the netdev ()
> add netdev with the same id as before - fail (Duplicated ID)
>
> Q35 is not mandatory for reproduction, the same with '-machine pc'

Reply via email to