From: Luiz Capitulino <lcapitulino@redhat.com>
To: qemu-devel@nongnu.org
Cc: aliguori@us.ibm.com
Subject: [Qemu-devel] [PATCH 16/17] PCI: Convert pci_device_hot_add() to QObject
Date: Fri, 4 Dec 2009 15:11:34 -0200 [thread overview]
Message-ID: <1259946695-15784-17-git-send-email-lcapitulino@redhat.com> (raw)
In-Reply-To: <1259946695-15784-1-git-send-email-lcapitulino@redhat.com>
Return a QDict with information about the just added device.
This commit should not change user output.
Please, note that this patch does not do error handling
conversion. In error conditions the handler still calls
monitor_printf().
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
hw/pci-hotplug.c | 40 ++++++++++++++++++++++++++++++++++++----
qemu-monitor.hx | 3 ++-
sysemu.h | 3 ++-
3 files changed, 40 insertions(+), 6 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 081d6d1..3ef124a 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -33,6 +33,7 @@
#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,
@@ -212,7 +213,36 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
return dev;
}
-void pci_device_hot_add(Monitor *mon, const QDict *qdict)
+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 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 }
+ */
+void pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data)
{
PCIDevice *dev = NULL;
const char *pci_addr = qdict_get_str(qdict, "pci_addr");
@@ -239,9 +269,11 @@ void pci_device_hot_add(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "invalid type: %s\n", type);
if (dev) {
- 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));
+ *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));
+ assert(*ret_data != NULL);
} else
monitor_printf(mon, "failed to add %s\n", opts);
}
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 62e395b..b50a2da 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -809,7 +809,8 @@ 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",
- .mhandler.cmd = pci_device_hot_add,
+ .user_print = pci_device_hot_add_print,
+ .mhandler.cmd_new = pci_device_hot_add,
},
#endif
diff --git a/sysemu.h b/sysemu.h
index efed771..9d80bb2 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -212,7 +212,8 @@ 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(Monitor *mon, const QDict *qdict);
+void pci_device_hot_add_print(Monitor *mon, const QObject *data);
+void pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data);
void drive_hot_add(Monitor *mon, const QDict *qdict);
void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict,
--
1.6.6.rc1.5.ge21a85
next prev parent reply other threads:[~2009-12-04 17:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-04 17:11 [Qemu-devel] [FOR 0.12 v2 00/17]: info handlers conversions to QObject Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 01/17] Introduce qemu-objects.h header file Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 02/17] Makefile: move QObject objs to their own entry Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 03/17] QDict: Introduce qdict_get_qbool() Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 04/17] QDict: Introduce qdict_get_qlist() Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 05/17] monitor: Fix do_info_balloon() output Luiz Capitulino
2009-12-07 19:41 ` Anthony Liguori
2009-12-04 17:11 ` [Qemu-devel] [PATCH 06/17] monitor: Convert do_info_status() to QObject Luiz Capitulino
2009-12-07 19:31 ` Anthony Liguori
2009-12-04 17:11 ` [Qemu-devel] [PATCH 07/17] monitor: Convert do_info_kvm() " Luiz Capitulino
2009-12-07 19:34 ` Anthony Liguori
2009-12-04 17:11 ` [Qemu-devel] [PATCH 08/17] monitor: Convert do_info_name() " Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 09/17] monitor: Convert do_info_hpet() " Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 10/17] monitor: Convert do_info_uuid() " Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 11/17] monitor: Convert do_info_mice() " Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 12/17] migration: Convert do_info_migrate() " Luiz Capitulino
2009-12-07 19:38 ` Anthony Liguori
2009-12-04 17:11 ` [Qemu-devel] [PATCH 13/17] block: Convert bdrv_info() " Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 14/17] block: Convert bdrv_info_stats() " Luiz Capitulino
2009-12-04 17:11 ` [Qemu-devel] [PATCH 15/17] char: Convert qemu_chr_info() " Luiz Capitulino
2009-12-04 17:11 ` Luiz Capitulino [this message]
2009-12-04 17:11 ` [Qemu-devel] [PATCH 17/17] VNC: Convert do_info_vnc() " Luiz Capitulino
-- strict thread matches above, loose matches on Subject: below --
2009-11-23 20:06 [Qemu-devel] [PATCH v1 00/17]: info handlers conversions " Luiz Capitulino
2009-11-23 20:06 ` [Qemu-devel] [PATCH 16/17] PCI: Convert pci_device_hot_add() " Luiz Capitulino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1259946695-15784-17-git-send-email-lcapitulino@redhat.com \
--to=lcapitulino@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).