From: "Michael S. Tsirkin" <mst@redhat.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 09/13] pci: Introduce and apply PCIDeviceAddress
Date: Sun, 10 Jun 2012 12:37:25 +0300 [thread overview]
Message-ID: <20120610093724.GB6250@redhat.com> (raw)
In-Reply-To: <d86cfd3af24bfddddd54bbaeee8b2292720ccfeb.1338799936.git.jan.kiszka@siemens.com>
On Mon, Jun 04, 2012 at 10:52:17AM +0200, Jan Kiszka wrote:
> This type encapsulates everything from domain to function. Use it first
> to simplify the pci_parse_devaddr interface.
>
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
OK.
Except this really is a legacy interface.
So please call it PCILegacyDeviceAddress
or something like that.
> ---
> hw/pci-hotplug.c | 29 ++++++++++++++---------------
> hw/pci.c | 31 ++++++++++++++-----------------
> hw/pci.h | 6 ++++--
> qemu-common.h | 7 +++++++
> 4 files changed, 39 insertions(+), 34 deletions(-)
>
> diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
> index e1654dc..aff4d85 100644
> --- a/hw/pci-hotplug.c
> +++ b/hw/pci-hotplug.c
> @@ -34,14 +34,14 @@
> #include "blockdev.h"
> #include "error.h"
>
> -static int read_pci_devaddr(Monitor *mon, const char *addr, unsigned int *domp,
> - unsigned int *busp, unsigned *slotp)
> +static int read_pci_devaddr(Monitor *mon, const char *addrstr,
> + PCIDeviceAddress *addr)
> {
> /* strip legacy tag */
> - if (!strncmp(addr, "pci_addr=", 9)) {
> - addr += 9;
> + if (!strncmp(addrstr, "pci_addr=", 9)) {
> + addrstr += 9;
> }
> - if (pci_parse_devaddr(addr, domp, busp, slotp, NULL)) {
> + if (pci_parse_devaddr(addrstr, addr, 0)) {
> monitor_printf(mon, "Invalid pci address\n");
> return -1;
> }
> @@ -122,18 +122,17 @@ static int scsi_hot_add(Monitor *mon, DeviceState *adapter,
> int pci_drive_hot_add(Monitor *mon, const QDict *qdict,
> DriveInfo *dinfo, int type)
> {
> - unsigned int dom, pci_bus;
> - unsigned slot;
> + PCIDeviceAddress addr;
> PCIDevice *dev;
> const char *pci_addr = qdict_get_str(qdict, "pci_addr");
>
> switch (type) {
> case IF_SCSI:
> - if (read_pci_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) {
> + if (read_pci_devaddr(mon, pci_addr, &addr)) {
> goto err;
> }
> - dev = pci_find_device(pci_find_root_bus(dom), pci_bus,
> - PCI_DEVFN(slot, 0));
> + dev = pci_find_device(pci_find_root_bus(addr.domain), addr.bus,
> + PCI_DEVFN(addr.slot, 0));
> if (!dev) {
> monitor_printf(mon, "no pci device with address %s\n", pci_addr);
> goto err;
> @@ -270,18 +269,18 @@ void pci_device_hot_add(Monitor *mon, const QDict *qdict)
>
> static int pci_device_hot_remove(Monitor *mon, const char *pci_addr)
> {
> + PCIDeviceAddress addr;
> PCIDevice *d;
> - unsigned int dom, bus;
> - unsigned slot;
> Error *local_err = NULL;
>
> - if (read_pci_devaddr(mon, pci_addr, &dom, &bus, &slot)) {
> + if (read_pci_devaddr(mon, pci_addr, &addr)) {
> return -1;
> }
>
> - d = pci_find_device(pci_find_root_bus(dom), bus, PCI_DEVFN(slot, 0));
> + d = pci_find_device(pci_find_root_bus(addr.domain), addr.bus,
> + PCI_DEVFN(addr.slot, 0));
> if (!d) {
> - monitor_printf(mon, "slot %d empty\n", slot);
> + monitor_printf(mon, "slot %d empty\n", addr.slot);
> return -1;
> }
>
> diff --git a/hw/pci.c b/hw/pci.c
> index 6471a68..4d700a9 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -509,20 +509,20 @@ static void pci_set_default_subsystem_id(PCIDevice *pci_dev)
> }
>
> /*
> - * Parse [[<domain>:]<bus>:]<slot>, return -1 on error if funcp == NULL
> + * Parse [[<domain>:]<bus>:]<slot>, return -1 on error if !PCI_DEVADDR_WITH_FUNC
> * [[<domain>:]<bus>:]<slot>.<func>, return -1 on error
> */
> -int pci_parse_devaddr(const char *addr, unsigned int *domp, unsigned int *busp,
> - unsigned int *slotp, unsigned int *funcp)
> +int pci_parse_devaddr(const char *addrstr, PCIDeviceAddress *addr,
> + unsigned int flags)
> {
> const char *p;
> char *e;
> unsigned long val;
> unsigned long dom = 0, bus = 0;
> - unsigned int slot = 0;
> + unsigned int slot;
> unsigned int func = 0;
>
> - p = addr;
> + p = addrstr;
> val = strtoul(p, &e, 16);
> if (e == p)
> return -1;
> @@ -544,7 +544,7 @@ int pci_parse_devaddr(const char *addr, unsigned int *domp, unsigned int *busp,
>
> slot = val;
>
> - if (funcp != NULL) {
> + if (flags & PCI_DEVADDR_WITH_FUNC) {
> if (*e != '.')
> return -1;
>
> @@ -556,37 +556,34 @@ int pci_parse_devaddr(const char *addr, unsigned int *domp, unsigned int *busp,
> func = val;
> }
>
> - /* if funcp == NULL func is 0 */
> if (dom > 0xffff || bus > 0xff || slot > 0x1f || func > 7)
> return -1;
>
> if (*e)
> return -1;
>
> - *domp = dom;
> - *busp = bus;
> - *slotp = slot;
> - if (funcp != NULL)
> - *funcp = func;
> + addr->domain = dom;
> + addr->bus = bus;
> + addr->slot = slot;
> + addr->function = func;
> return 0;
> }
>
> PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr)
> {
> - unsigned int dom, bus;
> - unsigned slot;
> + PCIDeviceAddress addr;
>
> if (!devaddr) {
> *devfnp = -1;
> return pci_find_bus_nr(pci_find_root_bus(0), 0);
> }
>
> - if (pci_parse_devaddr(devaddr, &dom, &bus, &slot, NULL) < 0) {
> + if (pci_parse_devaddr(devaddr, &addr, 0) < 0) {
> return NULL;
> }
>
> - *devfnp = PCI_DEVFN(slot, 0);
> - return pci_find_bus_nr(pci_find_root_bus(dom), bus);
> + *devfnp = PCI_DEVFN(addr.slot, 0);
> + return pci_find_bus_nr(pci_find_root_bus(addr.domain), addr.bus);
> }
>
> static void pci_init_cmask(PCIDevice *dev)
> diff --git a/hw/pci.h b/hw/pci.h
> index 552a586..6c48ffa 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -340,8 +340,10 @@ PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn);
> int pci_qdev_find_device(const char *id, PCIDevice **pdev);
> PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr);
>
> -int pci_parse_devaddr(const char *addr, unsigned int *domp, unsigned int *busp,
> - unsigned int *slotp, unsigned int *funcp);
> +#define PCI_DEVADDR_WITH_FUNC 2
> +
> +int pci_parse_devaddr(const char *addrstr, PCIDeviceAddress *addr,
> + unsigned int flags);
>
> void pci_device_deassert_intx(PCIDevice *dev);
>
> diff --git a/qemu-common.h b/qemu-common.h
> index 91e0562..32a35bc 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -274,6 +274,13 @@ typedef enum LostTickPolicy {
> LOST_TICK_MAX
> } LostTickPolicy;
>
> +typedef struct PCIDeviceAddress {
> + unsigned int domain;
> + unsigned int bus;
> + unsigned int slot;
> + unsigned int function;
> +} PCIDeviceAddress;
> +
> void tcg_exec_init(unsigned long tb_size);
> bool tcg_enabled(void);
>
> --
> 1.7.3.4
next prev parent reply other threads:[~2012-06-10 9:37 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-04 8:52 [Qemu-devel] [PATCH 00/13] pci: Cleanups & preparations for KVM device assignment Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 01/13] pci: Refactor pci_change_irq_level Jan Kiszka
2012-06-10 11:28 ` Michael S. Tsirkin
2012-06-04 8:52 ` [Qemu-devel] [PATCH 02/13] pci: Fold pci_bus_new_inplace into pci_bus_new Jan Kiszka
2012-06-07 12:51 ` Andreas Färber
2012-06-07 15:07 ` Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 03/13] pci: Introduce cached device INTx routing Jan Kiszka
2012-06-10 11:28 ` Michael S. Tsirkin
2012-06-04 8:52 ` [Qemu-devel] [PATCH 04/13] pci: Rename map_irq to route_pin Jan Kiszka
2012-06-10 11:28 ` Michael S. Tsirkin
2012-06-10 13:23 ` Michael S. Tsirkin
2012-06-04 8:52 ` [Qemu-devel] [PATCH 05/13] pci: Add pci_device_route_intx_to_irq Jan Kiszka
2012-06-07 14:32 ` Michael S. Tsirkin
2012-06-07 15:10 ` Jan Kiszka
2012-06-07 16:28 ` Michael S. Tsirkin
2012-06-07 16:46 ` Jan Kiszka
2012-06-07 16:55 ` Michael S. Tsirkin
2012-06-10 9:55 ` Michael S. Tsirkin
2012-06-10 10:08 ` Jan Kiszka
2012-06-10 10:41 ` Michael S. Tsirkin
2012-06-10 10:49 ` Jan Kiszka
2012-06-10 10:53 ` Michael S. Tsirkin
2012-06-10 14:19 ` Alex Williamson
2012-06-10 14:43 ` Michael S. Tsirkin
2012-06-10 15:25 ` Alex Williamson
2012-06-10 15:55 ` Michael S. Tsirkin
2012-06-10 16:30 ` Jan Kiszka
2012-06-10 16:50 ` Michael S. Tsirkin
2012-06-10 17:04 ` Michael S. Tsirkin
2012-06-04 8:52 ` [Qemu-devel] [PATCH 06/13] pci: Add INTx routing notifier Jan Kiszka
2012-06-07 13:14 ` Michael S. Tsirkin
2012-06-07 15:13 ` Jan Kiszka
2012-06-08 12:47 ` [Qemu-devel] [PATCH v2 " Jan Kiszka
2012-06-10 9:48 ` [Qemu-devel] [PATCH " Michael S. Tsirkin
2012-06-10 10:05 ` Jan Kiszka
2012-06-10 10:33 ` Michael S. Tsirkin
2012-06-10 10:44 ` Jan Kiszka
2012-06-10 11:11 ` Michael S. Tsirkin
2012-06-10 11:18 ` Jan Kiszka
2012-06-10 11:39 ` Michael S. Tsirkin
2012-06-10 12:09 ` Jan Kiszka
2012-06-10 12:16 ` Michael S. Tsirkin
2012-06-10 12:33 ` Jan Kiszka
2012-06-10 12:42 ` Michael S. Tsirkin
2012-06-10 12:47 ` Jan Kiszka
2012-06-10 13:19 ` Michael S. Tsirkin
2012-06-10 12:32 ` Michael S. Tsirkin
2012-06-04 8:52 ` [Qemu-devel] [PATCH 07/13] pci: Make domain and bus unsigned in pci_read_devaddr Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 08/13] pci: Export pci_parse_devaddr instead of pci_read_devaddr Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 09/13] pci: Introduce and apply PCIDeviceAddress Jan Kiszka
2012-06-10 9:37 ` Michael S. Tsirkin [this message]
2012-06-10 10:10 ` Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 10/13] pci: Fix coding style of pci_parse_devaddr Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 11/13] Move pci_parse_devaddr to qdev-properties Jan Kiszka
2012-06-07 12:57 ` Andreas Färber
2012-06-07 15:11 ` Jan Kiszka
2012-06-07 15:56 ` Andreas Färber
2012-06-08 10:57 ` Jan Kiszka
2012-06-08 12:03 ` Andreas Färber
2012-06-08 12:14 ` Jan Kiszka
2012-06-08 12:18 ` Andreas Färber
2012-06-08 12:45 ` Jan Kiszka
2012-06-08 14:17 ` Michael S. Tsirkin
2012-06-08 14:20 ` Anthony Liguori
2012-06-08 13:55 ` Anthony Liguori
2012-06-08 19:21 ` Andreas Färber
2012-06-04 8:52 ` [Qemu-devel] [PATCH 12/13] qdev-properties: Use qemu_parse_pci_devaddr for pci-devfn property Jan Kiszka
2012-06-04 8:52 ` [Qemu-devel] [PATCH 13/13] qdev-properties: Add pci-devaddr property Jan Kiszka
2012-06-10 9:35 ` Michael S. Tsirkin
2012-06-10 10:14 ` Jan Kiszka
2012-06-10 10:49 ` Michael S. Tsirkin
2012-06-10 10:52 ` Jan Kiszka
2012-06-10 10:58 ` Michael S. Tsirkin
2012-06-10 11:00 ` Jan Kiszka
2012-06-10 11:17 ` Michael S. Tsirkin
2012-06-10 11:25 ` Jan Kiszka
2012-06-10 12:01 ` Michael S. Tsirkin
2012-06-10 13:41 ` Alex Williamson
2012-06-10 14:03 ` Michael S. Tsirkin
2012-06-10 14:41 ` Alex Williamson
2012-06-10 14:54 ` Michael S. Tsirkin
2012-06-10 15:15 ` Alex Williamson
2012-06-10 15:37 ` Michael S. Tsirkin
2012-06-10 15:58 ` Alex Williamson
2012-06-10 16:22 ` Michael S. Tsirkin
2012-06-10 17:29 ` Alex Williamson
2012-06-10 17:57 ` Michael S. Tsirkin
2012-06-10 13:49 ` Michael S. Tsirkin
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=20120610093724.GB6250@redhat.com \
--to=mst@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=jan.kiszka@siemens.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.