Patchwork Revert "PCI: Convert pci_device_hot_add() to QObject"

login
register
mail settings
Submitter Markus Armbruster
Date April 26, 2010, 5:44 p.m.
Message ID <m3vdbexg5o.fsf@blackfin.pond.sub.org>
Download mbox | patch
Permalink /patch/50985/
State New
Headers show

Comments

Markus Armbruster - April 26, 2010, 5:44 p.m.
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(-)
Luiz Capitulino - April 26, 2010, 6:21 p.m.
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?
Markus Armbruster - May 3, 2010, 9:29 a.m.
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".
Anthony Liguori - May 3, 2010, 4:59 p.m.
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

>
>
Markus Armbruster - May 4, 2010, 8:38 a.m.
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?
Daniel P. Berrange - May 4, 2010, 9:26 a.m.
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

Patch

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,