[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 45/77] qdev: Add a hook for a bus to device if i
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 45/77] qdev: Add a hook for a bus to device if it can add devices |
Date: |
Wed, 18 Nov 2015 13:34:49 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 11/11/2015 01:27, Benjamin Herrenschmidt wrote:
> This allows a bus class to tell whether a given bus has room for
> any new device. max_dev isn't sufficient as the rules can depend
> on some arguments or can differ between instances of a bus. This
> will be used by PCI in subsequent patches
>
> Signed-off-by: Benjamin Herrenschmidt <address@hidden>
> ---
> include/hw/qdev-core.h | 1 +
> qdev-monitor.c | 13 ++++++++-----
> 2 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index 8057aed..6f3dd8d 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -202,6 +202,7 @@ struct BusClass {
> */
> char *(*get_fw_dev_path)(DeviceState *dev);
> void (*reset)(BusState *bus);
> + bool (*can_add_device)(BusState *bus, QemuOpts *opts);
> BusRealize realize;
> BusUnrealize unrealize;
>
> diff --git a/qdev-monitor.c b/qdev-monitor.c
> index a35098f..4023357 100644
> --- a/qdev-monitor.c
> +++ b/qdev-monitor.c
> @@ -384,7 +384,7 @@ static inline bool qbus_is_full(BusState *bus)
> * Return the bus if found, else %NULL.
> */
> static BusState *qbus_find_recursive(BusState *bus, const char *name,
> - const char *bus_typename)
> + const char *bus_typename, QemuOpts
> *opts)
> {
> BusChild *kid;
> BusState *pick, *child, *ret;
> @@ -398,7 +398,10 @@ static BusState *qbus_find_recursive(BusState *bus,
> const char *name,
> }
>
> if (match && !qbus_is_full(bus)) {
> - return bus; /* root matches and isn't full */
> + BusClass *bc = BUS_GET_CLASS(bus);
> + if (!bc->can_add_device || bc->can_add_device(bus, opts)) {
> + return bus; /* root matches and isn't full */
> + }
> }
>
> pick = match ? bus : NULL;
> @@ -406,7 +409,7 @@ static BusState *qbus_find_recursive(BusState *bus, const
> char *name,
> QTAILQ_FOREACH(kid, &bus->children, sibling) {
> DeviceState *dev = kid->child;
> QLIST_FOREACH(child, &dev->child_bus, sibling) {
> - ret = qbus_find_recursive(child, name, bus_typename);
> + ret = qbus_find_recursive(child, name, bus_typename, opts);
Tabs for indentation. There are other occurrences in the patch.
Apart from this,
Reviewed-by: Paolo Bonzini <address@hidden>
Acked-by: Paolo Bonzini <address@hidden>
> if (ret && !qbus_is_full(ret)) {
> return ret; /* a descendant matches and isn't full */
> }
> @@ -436,7 +439,7 @@ static BusState *qbus_find(const char *path, Error **errp)
> assert(!path[0]);
> elem[0] = len = 0;
> }
> - bus = qbus_find_recursive(sysbus_get_default(), elem, NULL);
> + bus = qbus_find_recursive(sysbus_get_default(), elem, NULL, NULL);
> if (!bus) {
> error_setg(errp, "Bus '%s' not found", elem);
> return NULL;
> @@ -542,7 +545,7 @@ DeviceState *qdev_device_add(QemuOpts *opts, Error **errp)
> return NULL;
> }
> } else if (dc->bus_type != NULL) {
> - bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type);
> + bus = qbus_find_recursive(sysbus_get_default(), NULL, dc->bus_type,
> opts);
> if (!bus || qbus_is_full(bus)) {
> error_setg(errp, "No '%s' bus found for device '%s'",
> dc->bus_type, driver);
>
- [Qemu-devel] [PATCH 30/77] ppc/xics: Implement H_IPOLL using an accessor, (continued)
- [Qemu-devel] [PATCH 30/77] ppc/xics: Implement H_IPOLL using an accessor, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 36/77] ppc/xics: Use a helper to add a new ICS, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 35/77] ppc/xics: Move xics_set_nr_irqs() to xics_spapr.c and xics_kvm.c, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 32/77] ppc/xics: Replace "icp" with "xics" in most places, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 39/77] ppc/xics: Add xics to the monitor "info pic" command, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 23/77] ppc: Turn a bunch of booleans from int to bool, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 26/77] ppc/pnv: Add skeletton PowerNV platform, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 27/77] ppc/pnv: Add XSCOM infrastructure, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 34/77] ppc/xics: An ICS with offset 0 is assumed to be uninitialized, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 45/77] qdev: Add a hook for a bus to device if it can add devices, Benjamin Herrenschmidt, 2015/11/10
- Re: [Qemu-devel] [PATCH 45/77] qdev: Add a hook for a bus to device if it can add devices,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 40/77] ppc/pnv: Wire up XICS native with PowerNV platform, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 33/77] ppc/xics: Make the ICSState a list, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 38/77] ppc/xics: Add "native" XICS subclass, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 41/77] ppc/pnv: Add LPC controller and hook it up with a UART and RTC, Benjamin Herrenschmidt, 2015/11/10
- [Qemu-devel] [PATCH 44/77] pci-bridge: Set a supported devfn_min for bridge, Benjamin Herrenschmidt, 2015/11/10