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)