Message ID | m3vdbexg5o.fsf@blackfin.pond.sub.org |
---|---|
State | New |
Headers | show |
On Mon, 26 Apr 2010 19:44:19 +0200 Markus Armbruster <armbru@redhat.com> wrote: > We don't want pci_add in QMP. Use device_add instead. > > This reverts commit 7a344f7ac7bb651d0556a933ed8060d3a9e5d949. > > Conflicts: > > hw/pci-hotplug.c > sysemu.h > > Signed-off-by: Markus Armbruster <armbru@redhat.com> The patch looks ok and I'm assuming that device_add can do everything pci_add does, right?
Luiz Capitulino <lcapitulino@redhat.com> writes: > On Mon, 26 Apr 2010 19:44:19 +0200 > Markus Armbruster <armbru@redhat.com> wrote: > >> We don't want pci_add in QMP. Use device_add instead. >> >> This reverts commit 7a344f7ac7bb651d0556a933ed8060d3a9e5d949. >> >> Conflicts: >> >> hw/pci-hotplug.c >> sysemu.h >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> > > The patch looks ok and I'm assuming that device_add can do everything > pci_add does, right? Not quite. pci_add comes in several flavors: * nic: Hot plug a PCI NIC. device_add is more general. * storage: Hot plug a PCI disk controller, and a drive connected to it. The controller is either virtio-blk-pci (if=virtio) or lsi53c895a (if=scsi). With the latter, the drive is optional. Use drive_add to hotplug additional SCSI drives. Except drive_add is not available in QMP. device_add is more general for controllers and the guest part of drives. I'm working on a more general alternative for the host part of drives. Why am I proposing to remove pci_add from QMP before its replacement is ready? I want it out sooner rather than later, because it isn't fully functional (errors and drive_add are missing), and we do not plan to complete the job. In other words, it's not really usable over QMP now, and it's not what we want for QMP anyway. Since we don't want it to be used over QMP, we should take it out, not leave it around as a trap for the uninitiated. Anyway, I'll respin with a more verbose commit message, and I'll throw in the buddy patch Revert "monitor: Convert do_pci_device_hot_remove() to QObject".
On 05/03/2010 04:29 AM, Markus Armbruster wrote: > Luiz Capitulino<lcapitulino@redhat.com> writes: > > >> On Mon, 26 Apr 2010 19:44:19 +0200 >> Markus Armbruster<armbru@redhat.com> wrote: >> >> >>> We don't want pci_add in QMP. Use device_add instead. >>> >>> This reverts commit 7a344f7ac7bb651d0556a933ed8060d3a9e5d949. >>> >>> Conflicts: >>> >>> hw/pci-hotplug.c >>> sysemu.h >>> >>> Signed-off-by: Markus Armbruster<armbru@redhat.com> >>> >> The patch looks ok and I'm assuming that device_add can do everything >> pci_add does, right? >> > Not quite. > > pci_add comes in several flavors: > > * nic: Hot plug a PCI NIC. device_add is more general. > > * storage: Hot plug a PCI disk controller, and a drive connected to it. > > The controller is either virtio-blk-pci (if=virtio) or lsi53c895a > (if=scsi). With the latter, the drive is optional. Use drive_add to > hotplug additional SCSI drives. Except drive_add is not available in > QMP. > > device_add is more general for controllers and the guest part of > drives. I'm working on a more general alternative for the host part > of drives. > > Why am I proposing to remove pci_add from QMP before its replacement is > ready? I want it out sooner rather than later, because it isn't fully > functional (errors and drive_add are missing), and we do not plan to > complete the job. In other words, it's not really usable over QMP now, > and it's not what we want for QMP anyway. Since we don't want it to be > used over QMP, we should take it out, not leave it around as a trap for > the uninitiated. > > Anyway, I'll respin with a more verbose commit message, and I'll throw > in the buddy patch Revert "monitor: Convert do_pci_device_hot_remove() > to QObject". > Does libvirt not use pci_add with QMP? Regards, Anthony Liguori > >
Anthony Liguori <anthony@codemonkey.ws> writes: > On 05/03/2010 04:29 AM, Markus Armbruster wrote: [...] >> Why am I proposing to remove pci_add from QMP before its replacement is >> ready? I want it out sooner rather than later, because it isn't fully >> functional (errors and drive_add are missing), and we do not plan to >> complete the job. In other words, it's not really usable over QMP now, >> and it's not what we want for QMP anyway. Since we don't want it to be >> used over QMP, we should take it out, not leave it around as a trap for >> the uninitiated. >> >> Anyway, I'll respin with a more verbose commit message, and I'll throw >> in the buddy patch Revert "monitor: Convert do_pci_device_hot_remove() >> to QObject". >> > > Does libvirt not use pci_add with QMP? Re QMP in general: libvirt has code for QMP, but it is disabled. It'll get enabled as soon as a usable QMP ships, which we all expect for the next release. Re pci_add over QMP, git://libvirt.org/libvirt.git has: commit efd4ee7871a631a9293e94d58fc4384c162388a7 Author: Daniel P. Berrange <berrange@redhat.com> Date: Wed Apr 14 15:23:38 2010 +0100 Remove code from JSON monitor for commands that won't be ported The QEMU developers have stated that they will not be porting the commands 'pci_add', 'pci_del', 'usb_add', 'usb_del' to the JSON mode monitor, since they're obsoleted by 'device_add' and 'device_del'. libvirt has (untested) code that would have supported those commands in theory, but since we already use device_add/del where available, there's no need to keep the legacy stuff anymore. The text mode monitor keeps support for all commands for sake of historical compatability. * src/qemu/qemu_monitor_json.c: Remove 'pci_add', 'pci_del', 'usb_add', 'usb_del' commands Does this answer your question?
On Mon, May 03, 2010 at 11:59:55AM -0500, Anthony Liguori wrote: > On 05/03/2010 04:29 AM, Markus Armbruster wrote: > >Why am I proposing to remove pci_add from QMP before its replacement is > >ready? I want it out sooner rather than later, because it isn't fully > >functional (errors and drive_add are missing), and we do not plan to > >complete the job. In other words, it's not really usable over QMP now, > >and it's not what we want for QMP anyway. Since we don't want it to be > >used over QMP, we should take it out, not leave it around as a trap for > >the uninitiated. > > > >Anyway, I'll respin with a more verbose commit message, and I'll throw > >in the buddy patch Revert "monitor: Convert do_pci_device_hot_remove() > >to QObject". > > > > Does libvirt not use pci_add with QMP? As of QEMU 0.12, libvirt uses -device syntax for everything. As of QEMU 0.13, libvirt will use QMP for everything (if compiled with the libyajl JSON library - otherwise text mode only). When -device is in use, we use device_add exclusively. Therefore, we will have no need for pci_add & friends when using QMP. Regards, Daniel
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c index cc45c50..22a7ce4 100644 --- a/hw/pci-hotplug.c +++ b/hw/pci-hotplug.c @@ -33,7 +33,6 @@ #include "scsi.h" #include "virtio-blk.h" #include "qemu-config.h" -#include "qemu-objects.h" #if defined(TARGET_I386) static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon, @@ -224,36 +223,7 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon, return dev; } -void pci_device_hot_add_print(Monitor *mon, const QObject *data) -{ - QDict *qdict; - - assert(qobject_type(data) == QTYPE_QDICT); - qdict = qobject_to_qdict(data); - - monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n", - (int) qdict_get_int(qdict, "domain"), - (int) qdict_get_int(qdict, "bus"), - (int) qdict_get_int(qdict, "slot"), - (int) qdict_get_int(qdict, "function")); - -} - -/** - * pci_device_hot_add(): Hot add a PCI device - * - * Return a QDict with the following device information: - * - * - "domain": domain number - * - "bus": bus number - * - "slot": slot number - * - "function": function number - * - * Example: - * - * { "domain": 0, "bus": 0, "slot": 5, "function": 0 } - */ -int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data) +void pci_device_hot_add(Monitor *mon, const QDict *qdict) { PCIDevice *dev = NULL; const char *pci_addr = qdict_get_str(qdict, "pci_addr"); @@ -278,20 +248,14 @@ int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data) dev = qemu_pci_hot_add_storage(mon, pci_addr, opts); } else { monitor_printf(mon, "invalid type: %s\n", type); - return -1; } if (dev) { - *ret_data = - qobject_from_jsonf("{ 'domain': 0, 'bus': %d, 'slot': %d, " - "'function': %d }", pci_bus_num(dev->bus), - PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); - } else { + monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n", + 0, pci_bus_num(dev->bus), PCI_SLOT(dev->devfn), + PCI_FUNC(dev->devfn)); + } else monitor_printf(mon, "failed to add %s\n", opts); - return -1; - } - - return 0; } #endif diff --git a/qemu-monitor.hx b/qemu-monitor.hx index 5ea5748..501f9de 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -859,8 +859,7 @@ ETEXI .args_type = "pci_addr:s,type:s,opts:s?", .params = "auto|[[<domain>:]<bus>:]<slot> nic|storage [[vlan=n][,macaddr=addr][,model=type]] [file=file][,if=type][,bus=nr]...", .help = "hot-add PCI device", - .user_print = pci_device_hot_add_print, - .mhandler.cmd_new = pci_device_hot_add, + .mhandler.cmd = pci_device_hot_add, }, #endif diff --git a/sysemu.h b/sysemu.h index d0effa0..fcfccdf 100644 --- a/sysemu.h +++ b/sysemu.h @@ -199,8 +199,7 @@ extern DriveInfo *drive_init(QemuOpts *arg, void *machine, int *fatal_error); DriveInfo *add_init_drive(const char *opts); /* pci-hotplug */ -void pci_device_hot_add_print(Monitor *mon, const QObject *data); -int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data); +void pci_device_hot_add(Monitor *mon, const QDict *qdict); void drive_hot_add(Monitor *mon, const QDict *qdict); int pci_device_hot_remove(Monitor *mon, const char *pci_addr); int do_pci_device_hot_remove(Monitor *mon, const QDict *qdict,
We don't want pci_add in QMP. Use device_add instead. This reverts commit 7a344f7ac7bb651d0556a933ed8060d3a9e5d949. Conflicts: hw/pci-hotplug.c sysemu.h Signed-off-by: Markus Armbruster <armbru@redhat.com> --- hw/pci-hotplug.c | 46 +++++----------------------------------------- qemu-monitor.hx | 3 +-- sysemu.h | 3 +-- 3 files changed, 7 insertions(+), 45 deletions(-)