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'