All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 13/17] PCI: Convert pci_device_hot_add() to QObject
Date: Fri, 20 Nov 2009 15:21:26 +0100	[thread overview]
Message-ID: <m3fx89qntl.fsf@crossbow.pond.sub.org> (raw)
In-Reply-To: <1258489944-12159-14-git-send-email-lcapitulino@redhat.com> (Luiz Capitulino's message of "Tue, 17 Nov 2009 18:32:20 -0200")

Luiz Capitulino <lcapitulino@redhat.com> writes:

> 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 |   37 +++++++++++++++++++++++++++++++++----
>  qemu-monitor.hx  |    3 ++-
>  sysemu.h         |    3 ++-
>  3 files changed, 37 insertions(+), 6 deletions(-)
>
> diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
> index a254498..93802a2 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"));

Despite its name, qdict_get_int() doesn't return int, but int64_t (trap
for the unwary, in my opinion), so these casts are actually needed.
The're safe, because the values put into the dictionary never overflow
the cast.

Would be nice if we could avoid this non-local argument and make the
code more obviously correct, but it's probably not worth the bother.

> +
> +}
> +
> +/**
> + * 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,8 @@ 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);
>  }
[...]

  reply	other threads:[~2009-11-20 14:21 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-17 20:32 [Qemu-devel] [PATCH v0 00/17]: info handlers conversions to QObject Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 01/17] Introduce qemu-objects.h header file Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 02/17] Makefile: move QObject objs to their own entry Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 03/17] QDict: Introduce qdict_get_qbool() Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 04/17] QDict: Introduce qdict_get_qlist() Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 05/17] monitor: Convert do_info_status() to QObject Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 06/17] monitor: Convert do_info_kvm() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 07/17] monitor: Convert do_info_name() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 08/17] monitor: Convert do_info_hpet() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 09/17] monitor: Convert do_info_uuid() " Luiz Capitulino
2009-11-20 13:38   ` Markus Armbruster
2009-11-17 20:32 ` [Qemu-devel] [PATCH 10/17] migration: Convert do_info_migrate() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 11/17] block: Convert bdrv_info() " Luiz Capitulino
2009-11-20 14:06   ` Markus Armbruster
2009-11-23 13:21     ` Luiz Capitulino
2009-11-23 15:34       ` Markus Armbruster
2009-11-17 20:32 ` [Qemu-devel] [PATCH 12/17] char: Convert qemu_chr_info() " Luiz Capitulino
2009-11-20 14:10   ` Markus Armbruster
2009-11-23 13:23     ` Luiz Capitulino
2009-11-23 15:39       ` Markus Armbruster
2009-11-17 20:32 ` [Qemu-devel] [PATCH 13/17] PCI: Convert pci_device_hot_add() " Luiz Capitulino
2009-11-20 14:21   ` Markus Armbruster [this message]
2009-11-23  9:44   ` [Qemu-devel] " Michael S. Tsirkin
2009-11-23 13:30     ` Luiz Capitulino
2009-11-30 10:31       ` Michael S. Tsirkin
2009-11-17 20:32 ` [Qemu-devel] [PATCH 14/17] block: Convert bdrv_info_stats() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 15/17] VNC: Convert do_info_vnc() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 16/17] net: Convert do_info_network() " Luiz Capitulino
2009-11-17 20:32 ` [Qemu-devel] [PATCH 17/17] monitor: Convert do_info_mice() " 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=m3fx89qntl.fsf@crossbow.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=lcapitulino@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.