All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full
@ 2026-07-07  8:40 Philippe Mathieu-Daudé
  2026-07-07  8:40 ` [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument Philippe Mathieu-Daudé
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-07-07  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel P. Berrangé, Paolo Bonzini, Mark Cave-Ayland,
	Thomas Huth, Michael Tokarev, Artyom Tarasenko, Peter Maydell,
	Michael S. Tsirkin, Philippe Mathieu-Daudé

Generic fix for the SPARC/Sabre issue reported by Thomas:
https://lore.kernel.org/qemu-devel/20260309181452.83702-1-thuth@redhat.com/
"hw/sparc64/sun4u: Mark unusable PCI busses as full to ease device plugging"

Philippe Mathieu-Daudé (3):
  hw/pci: Have various pci_bus*() methods take a const PCIBus argument
  hw/qdev: Introduce BusClass::is_full() handler
  hw/pci: Consider reserved slots mask when checking PCI bus is full

 include/hw/core/qdev.h              |  5 +++++
 include/hw/pci/pci.h                | 10 ++++-----
 include/hw/pci/pci_bus.h            | 10 ++++-----
 hw/pci-bridge/pci_expander_bridge.c |  4 ++--
 hw/pci/pci.c                        | 35 +++++++++++++++++++++--------
 system/qdev-monitor.c               |  3 +++
 6 files changed, 46 insertions(+), 21 deletions(-)

-- 
2.53.0



^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument
  2026-07-07  8:40 [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
@ 2026-07-07  8:40 ` Philippe Mathieu-Daudé
  2026-07-07  9:11   ` Thomas Huth
  2026-07-07  8:40 ` [PATCH 2/3] hw/qdev: Introduce BusClass::is_full() handler Philippe Mathieu-Daudé
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-07-07  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel P. Berrangé, Paolo Bonzini, Mark Cave-Ayland,
	Thomas Huth, Michael Tokarev, Artyom Tarasenko, Peter Maydell,
	Michael S. Tsirkin, Philippe Mathieu-Daudé

Mark the PCIBus pointer argument const when methods
don't need to update the structure referenced.

Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
---
 include/hw/pci/pci.h                | 10 +++++-----
 include/hw/pci/pci_bus.h            | 10 +++++-----
 hw/pci-bridge/pci_expander_bridge.c |  4 ++--
 hw/pci/pci.c                        | 18 +++++++++---------
 4 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index f2448e941a0..f05d4d867b4 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -308,8 +308,8 @@ void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn set_irq,
                   void *irq_opaque, int nirq);
 void pci_bus_map_irqs(PCIBus *bus, pci_map_irq_fn map_irq);
 void pci_bus_irqs_cleanup(PCIBus *bus);
-int pci_bus_get_irq_level(PCIBus *bus, int irq_num);
-uint32_t pci_bus_get_slot_reserved_mask(PCIBus *bus);
+int pci_bus_get_irq_level(const PCIBus *bus, int irq_num);
+uint32_t pci_bus_get_slot_reserved_mask(const PCIBus *bus);
 void pci_bus_set_slot_reserved_mask(PCIBus *bus, uint32_t mask);
 void pci_bus_clear_slot_reserved_mask(PCIBus *bus, uint32_t mask);
 bool pci_bus_add_fw_cfg_extra_pci_roots(FWCfgState *fw_cfg,
@@ -345,14 +345,14 @@ static inline PCIBus *pci_get_bus(const PCIDevice *dev)
 {
     return PCI_BUS(qdev_get_parent_bus(DEVICE(dev)));
 }
-int pci_bus_num(PCIBus *s);
-void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus);
+int pci_bus_num(const PCIBus *s);
+void pci_bus_range(const PCIBus *bus, int *min_bus, int *max_bus);
 static inline int pci_dev_bus_num(const PCIDevice *dev)
 {
     return pci_bus_num(pci_get_bus(dev));
 }
 
-int pci_bus_numa_node(PCIBus *bus);
+int pci_bus_numa_node(const PCIBus *bus);
 void pci_for_each_device(PCIBus *bus, int bus_num,
                          pci_bus_dev_fn fn,
                          void *opaque);
diff --git a/include/hw/pci/pci_bus.h b/include/hw/pci/pci_bus.h
index c7384467888..7a3f2e4dde9 100644
--- a/include/hw/pci/pci_bus.h
+++ b/include/hw/pci/pci_bus.h
@@ -15,8 +15,8 @@ struct PCIBusClass {
     BusClass parent_class;
     /*< public >*/
 
-    int (*bus_num)(PCIBus *bus);
-    uint16_t (*numa_node)(PCIBus *bus);
+    int (*bus_num)(const PCIBus *bus);
+    uint16_t (*numa_node)(const PCIBus *bus);
 };
 
 enum PCIBusFlags {
@@ -58,17 +58,17 @@ struct PCIBus {
     Notifier machine_done;
 };
 
-static inline bool pci_bus_is_cxl(PCIBus *bus)
+static inline bool pci_bus_is_cxl(const PCIBus *bus)
 {
     return !!(bus->flags & PCI_BUS_CXL);
 }
 
-static inline bool pci_bus_is_root(PCIBus *bus)
+static inline bool pci_bus_is_root(const PCIBus *bus)
 {
     return !!(bus->flags & PCI_BUS_IS_ROOT);
 }
 
-static inline bool pci_bus_allows_extended_config_space(PCIBus *bus)
+static inline bool pci_bus_allows_extended_config_space(const PCIBus *bus)
 {
     return !!(bus->flags & PCI_BUS_EXTENDED_CONFIG_SPACE);
 }
diff --git a/hw/pci-bridge/pci_expander_bridge.c b/hw/pci-bridge/pci_expander_bridge.c
index 40ffbc4e082..f981c47edee 100644
--- a/hw/pci-bridge/pci_expander_bridge.c
+++ b/hw/pci-bridge/pci_expander_bridge.c
@@ -68,14 +68,14 @@ bool cxl_get_hb_passthrough(PCIHostState *hb)
     return host->passthrough;
 }
 
-static int pxb_bus_num(PCIBus *bus)
+static int pxb_bus_num(const PCIBus *bus)
 {
     PXBDev *pxb = PXB_DEV(bus->parent_dev);
 
     return pxb->bus_nr;
 }
 
-static uint16_t pxb_bus_numa_node(PCIBus *bus)
+static uint16_t pxb_bus_numa_node(const PCIBus *bus)
 {
     PXBDev *pxb = PXB_DEV(bus->parent_dev);
 
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index d3191609e28..b04e94a150b 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -225,7 +225,7 @@ static void pci_bus_unrealize(BusState *qbus)
     vmstate_unregister(NULL, &vmstate_pcibus, bus);
 }
 
-static int pcibus_num(PCIBus *bus)
+static int pcibus_num(const PCIBus *bus)
 {
     if (pci_bus_is_root(bus)) {
         return 0; /* pci host bridge */
@@ -233,7 +233,7 @@ static int pcibus_num(PCIBus *bus)
     return bus->parent_dev->config[PCI_SECONDARY_BUS];
 }
 
-static uint16_t pcibus_numa_node(PCIBus *bus)
+static uint16_t pcibus_numa_node(const PCIBus *bus)
 {
     return NUMA_NODE_UNASSIGNED;
 }
@@ -411,7 +411,7 @@ static void pci_change_irq_level(PCIDevice *pci_dev, int irq_num, int change)
     pci_bus_change_irq_level(bus, irq_num, change);
 }
 
-int pci_bus_get_irq_level(PCIBus *bus, int irq_num)
+int pci_bus_get_irq_level(const PCIBus *bus, int irq_num)
 {
     assert(irq_num >= 0);
     assert(irq_num < bus->nirq);
@@ -781,13 +781,13 @@ void pci_unregister_root_bus(PCIBus *bus)
     pci_root_bus_cleanup(bus);
 }
 
-int pci_bus_num(PCIBus *s)
+int pci_bus_num(const PCIBus *s)
 {
     return PCI_BUS_GET_CLASS(s)->bus_num(s);
 }
 
 /* Returns the min and max bus numbers of a PCI bus hierarchy */
-void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus)
+void pci_bus_range(const PCIBus *bus, int *min_bus, int *max_bus)
 {
     int i;
     *min_bus = *max_bus = pci_bus_num(bus);
@@ -802,7 +802,7 @@ void pci_bus_range(PCIBus *bus, int *min_bus, int *max_bus)
     }
 }
 
-int pci_bus_numa_node(PCIBus *bus)
+int pci_bus_numa_node(const PCIBus *bus)
 {
     return PCI_BUS_GET_CLASS(bus)->numa_node(bus);
 }
@@ -1304,17 +1304,17 @@ uint16_t pci_requester_id(PCIDevice *dev)
     return pci_req_id_cache_extract(&dev->requester_id_cache);
 }
 
-static bool pci_bus_devfn_available(PCIBus *bus, int devfn)
+static bool pci_bus_devfn_available(const PCIBus *bus, int devfn)
 {
     return !(bus->devices[devfn]);
 }
 
-static bool pci_bus_devfn_reserved(PCIBus *bus, int devfn)
+static bool pci_bus_devfn_reserved(const PCIBus *bus, int devfn)
 {
     return bus->slot_reserved_mask & (1UL << PCI_SLOT(devfn));
 }
 
-uint32_t pci_bus_get_slot_reserved_mask(PCIBus *bus)
+uint32_t pci_bus_get_slot_reserved_mask(const PCIBus *bus)
 {
     return bus->slot_reserved_mask;
 }
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] hw/qdev: Introduce BusClass::is_full() handler
  2026-07-07  8:40 [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
  2026-07-07  8:40 ` [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument Philippe Mathieu-Daudé
@ 2026-07-07  8:40 ` Philippe Mathieu-Daudé
  2026-07-07  8:40 ` [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
  2026-07-07 22:05 ` [PATCH 0/3] " Mark Cave-Ayland
  3 siblings, 0 replies; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-07-07  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel P. Berrangé, Paolo Bonzini, Mark Cave-Ayland,
	Thomas Huth, Michael Tokarev, Artyom Tarasenko, Peter Maydell,
	Michael S. Tsirkin, Philippe Mathieu-Daudé

Allow BusClass implementation to have their own is_full() handler.
Use it in qbus_is_full().

Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
---
 include/hw/core/qdev.h | 5 +++++
 system/qdev-monitor.c  | 3 +++
 2 files changed, 8 insertions(+)

diff --git a/include/hw/core/qdev.h b/include/hw/core/qdev.h
index e1476223411..c1c17bd6f2b 100644
--- a/include/hw/core/qdev.h
+++ b/include/hw/core/qdev.h
@@ -345,6 +345,11 @@ struct BusClass {
      */
     bool (*check_address)(BusState *bus, DeviceState *dev, Error **errp);
 
+    /*
+     * Return whether more devices can be plugged into @bus.
+     */
+    bool (*is_full)(const BusState *bus);
+
     BusRealize realize;
     BusUnrealize unrealize;
 
diff --git a/system/qdev-monitor.c b/system/qdev-monitor.c
index 00fed791cce..496850bd8ed 100644
--- a/system/qdev-monitor.c
+++ b/system/qdev-monitor.c
@@ -454,6 +454,9 @@ static inline bool qbus_is_full(BusState *bus)
         return true;
     }
     bus_class = BUS_GET_CLASS(bus);
+    if (bus_class->is_full && bus_class->is_full(bus)) {
+        return true;
+    }
     return bus_class->max_dev && bus->num_children >= bus_class->max_dev;
 }
 
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full
  2026-07-07  8:40 [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
  2026-07-07  8:40 ` [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument Philippe Mathieu-Daudé
  2026-07-07  8:40 ` [PATCH 2/3] hw/qdev: Introduce BusClass::is_full() handler Philippe Mathieu-Daudé
@ 2026-07-07  8:40 ` Philippe Mathieu-Daudé
  2026-07-07 10:20   ` Michael S. Tsirkin
  2026-07-07 22:05 ` [PATCH 0/3] " Mark Cave-Ayland
  3 siblings, 1 reply; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-07-07  8:40 UTC (permalink / raw)
  To: qemu-devel
  Cc: Daniel P. Berrangé, Paolo Bonzini, Mark Cave-Ayland,
	Thomas Huth, Michael Tokarev, Artyom Tarasenko, Peter Maydell,
	Michael S. Tsirkin, Philippe Mathieu-Daudé

Do not consider reserved slots as available.

Fixes: 8b8849844fd ("pci: add reserved slot check to do_pci_register_device")
Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
---
 hw/pci/pci.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index b04e94a150b..2e5412137b3 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -62,6 +62,7 @@ static char *pcibus_get_dev_path(DeviceState *dev);
 static char *pcibus_get_fw_dev_path(DeviceState *dev);
 static void pcibus_reset_hold(Object *obj, ResetType type);
 static bool pcie_has_upstream_port(PCIDevice *dev);
+static bool pci_bus_is_full(const BusState *qbus);
 
 static void prop_pci_busnr_get(Object *obj, Visitor *v, const char *name,
                                void *opaque, Error **errp)
@@ -293,6 +294,7 @@ static void pci_bus_class_init(ObjectClass *klass, const void *data)
     k->print_dev = pcibus_dev_print;
     k->get_dev_path = pcibus_get_dev_path;
     k->get_fw_dev_path = pcibus_get_fw_dev_path;
+    k->is_full = pci_bus_is_full;
     k->realize = pci_bus_realize;
     k->unrealize = pci_bus_unrealize;
 
@@ -1329,6 +1331,21 @@ void pci_bus_clear_slot_reserved_mask(PCIBus *bus, uint32_t mask)
     bus->slot_reserved_mask &= ~mask;
 }
 
+static bool pci_bus_is_full(const BusState *qbus)
+{
+    const PCIBus *bus = PCI_BUS(qbus);
+
+    for (int i = 0; i < PCI_DEVFN_MAX; i += PCI_FUNC_MAX) {
+        if (pci_bus_devfn_reserved(bus, i)) {
+            continue;
+        }
+        if (pci_bus_devfn_available(bus, i)) {
+            return false;
+        }
+    }
+    return true;
+}
+
 /* -1 for devfn means auto assign */
 static PCIDevice *do_pci_register_device(PCIDevice *pci_dev,
                                          const char *name, int devfn,
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument
  2026-07-07  8:40 ` [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument Philippe Mathieu-Daudé
@ 2026-07-07  9:11   ` Thomas Huth
  0 siblings, 0 replies; 9+ messages in thread
From: Thomas Huth @ 2026-07-07  9:11 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Daniel P. Berrangé, Paolo Bonzini, Mark Cave-Ayland,
	Michael Tokarev, Artyom Tarasenko, Peter Maydell,
	Michael S. Tsirkin

On 07/07/2026 10.40, Philippe Mathieu-Daudé wrote:
> Mark the PCIBus pointer argument const when methods
> don't need to update the structure referenced.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
> ---
>   include/hw/pci/pci.h                | 10 +++++-----
>   include/hw/pci/pci_bus.h            | 10 +++++-----
>   hw/pci-bridge/pci_expander_bridge.c |  4 ++--
>   hw/pci/pci.c                        | 18 +++++++++---------
>   4 files changed, 21 insertions(+), 21 deletions(-)
Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full
  2026-07-07  8:40 ` [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
@ 2026-07-07 10:20   ` Michael S. Tsirkin
  2026-07-07 12:53     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 9+ messages in thread
From: Michael S. Tsirkin @ 2026-07-07 10:20 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Daniel P. Berrangé, Paolo Bonzini,
	Mark Cave-Ayland, Thomas Huth, Michael Tokarev, Artyom Tarasenko,
	Peter Maydell

On Tue, Jul 07, 2026 at 10:40:50AM +0200, Philippe Mathieu-Daudé wrote:
> Do not consider reserved slots as available.
>

Philippe this is not how commit logs are supposed to look,
just repeating what the patch does with no explanation.
You know that.
 
> Fixes: 8b8849844fd ("pci: add reserved slot check to do_pci_register_device")

especially if it's supposedly a regression?

> Reported-by: Thomas Huth <thuth@redhat.com>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
> ---
>  hw/pci/pci.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/hw/pci/pci.c b/hw/pci/pci.c
> index b04e94a150b..2e5412137b3 100644
> --- a/hw/pci/pci.c
> +++ b/hw/pci/pci.c
> @@ -62,6 +62,7 @@ static char *pcibus_get_dev_path(DeviceState *dev);
>  static char *pcibus_get_fw_dev_path(DeviceState *dev);
>  static void pcibus_reset_hold(Object *obj, ResetType type);
>  static bool pcie_has_upstream_port(PCIDevice *dev);
> +static bool pci_bus_is_full(const BusState *qbus);
>  
>  static void prop_pci_busnr_get(Object *obj, Visitor *v, const char *name,
>                                 void *opaque, Error **errp)
> @@ -293,6 +294,7 @@ static void pci_bus_class_init(ObjectClass *klass, const void *data)
>      k->print_dev = pcibus_dev_print;
>      k->get_dev_path = pcibus_get_dev_path;
>      k->get_fw_dev_path = pcibus_get_fw_dev_path;
> +    k->is_full = pci_bus_is_full;
>      k->realize = pci_bus_realize;
>      k->unrealize = pci_bus_unrealize;
>  
> @@ -1329,6 +1331,21 @@ void pci_bus_clear_slot_reserved_mask(PCIBus *bus, uint32_t mask)
>      bus->slot_reserved_mask &= ~mask;
>  }
>  
> +static bool pci_bus_is_full(const BusState *qbus)
> +{
> +    const PCIBus *bus = PCI_BUS(qbus);
> +
> +    for (int i = 0; i < PCI_DEVFN_MAX; i += PCI_FUNC_MAX) {
> +        if (pci_bus_devfn_reserved(bus, i)) {
> +            continue;
> +        }
> +        if (pci_bus_devfn_available(bus, i)) {
> +            return false;
> +        }
> +    }
> +    return true;
> +}
> +
>  /* -1 for devfn means auto assign */
>  static PCIDevice *do_pci_register_device(PCIDevice *pci_dev,
>                                           const char *name, int devfn,
> -- 
> 2.53.0



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full
  2026-07-07 10:20   ` Michael S. Tsirkin
@ 2026-07-07 12:53     ` Philippe Mathieu-Daudé
  2026-07-07 13:43       ` Michael S. Tsirkin
  0 siblings, 1 reply; 9+ messages in thread
From: Philippe Mathieu-Daudé @ 2026-07-07 12:53 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: qemu-devel, Daniel P. Berrangé, Paolo Bonzini,
	Mark Cave-Ayland, Thomas Huth, Michael Tokarev, Artyom Tarasenko,
	Peter Maydell

On 7/7/26 12:20, Michael S. Tsirkin wrote:
> On Tue, Jul 07, 2026 at 10:40:50AM +0200, Philippe Mathieu-Daudé wrote:
>> Do not consider reserved slots as available.
>>
> 
> Philippe this is not how commit logs are supposed to look,
> just repeating what the patch does with no explanation.
> You know that.

Yes, indeed, you are right :( I'll blame the heat for sending this
botched description. And I'll ignore Thomas issue for the freeze,
we didn't care for 4 months, so I should not feel any rush.

>   
>> Fixes: 8b8849844fd ("pci: add reserved slot check to do_pci_register_device")
> 
> especially if it's supposedly a regression?
> 
>> Reported-by: Thomas Huth <thuth@redhat.com>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
>> ---
>>   hw/pci/pci.c | 17 +++++++++++++++++
>>   1 file changed, 17 insertions(+)



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full
  2026-07-07 12:53     ` Philippe Mathieu-Daudé
@ 2026-07-07 13:43       ` Michael S. Tsirkin
  0 siblings, 0 replies; 9+ messages in thread
From: Michael S. Tsirkin @ 2026-07-07 13:43 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Daniel P. Berrangé, Paolo Bonzini,
	Mark Cave-Ayland, Thomas Huth, Michael Tokarev, Artyom Tarasenko,
	Peter Maydell

On Tue, Jul 07, 2026 at 02:53:24PM +0200, Philippe Mathieu-Daudé wrote:
> On 7/7/26 12:20, Michael S. Tsirkin wrote:
> > On Tue, Jul 07, 2026 at 10:40:50AM +0200, Philippe Mathieu-Daudé wrote:
> > > Do not consider reserved slots as available.
> > > 
> > 
> > Philippe this is not how commit logs are supposed to look,
> > just repeating what the patch does with no explanation.
> > You know that.
> 
> Yes, indeed, you are right :( I'll blame the heat for sending this
> botched description. And I'll ignore Thomas issue for the freeze,
> we didn't care for 4 months, so I should not feel any rush.


Well it's a bugfix, can go in after the freeze.

> > > Fixes: 8b8849844fd ("pci: add reserved slot check to do_pci_register_device")
> > 
> > especially if it's supposedly a regression?
> > 
> > > Reported-by: Thomas Huth <thuth@redhat.com>
> > > Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
> > > ---
> > >   hw/pci/pci.c | 17 +++++++++++++++++
> > >   1 file changed, 17 insertions(+)



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full
  2026-07-07  8:40 [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
                   ` (2 preceding siblings ...)
  2026-07-07  8:40 ` [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
@ 2026-07-07 22:05 ` Mark Cave-Ayland
  3 siblings, 0 replies; 9+ messages in thread
From: Mark Cave-Ayland @ 2026-07-07 22:05 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: Daniel P. Berrangé, Paolo Bonzini, Thomas Huth,
	Michael Tokarev, Artyom Tarasenko, Peter Maydell,
	Michael S. Tsirkin

On 07/07/2026 09:40, Philippe Mathieu-Daudé wrote:

> Generic fix for the SPARC/Sabre issue reported by Thomas:
> https://lore.kernel.org/qemu-devel/20260309181452.83702-1-thuth@redhat.com/
> "hw/sparc64/sun4u: Mark unusable PCI busses as full to ease device plugging"
> 
> Philippe Mathieu-Daudé (3):
>    hw/pci: Have various pci_bus*() methods take a const PCIBus argument
>    hw/qdev: Introduce BusClass::is_full() handler
>    hw/pci: Consider reserved slots mask when checking PCI bus is full
> 
>   include/hw/core/qdev.h              |  5 +++++
>   include/hw/pci/pci.h                | 10 ++++-----
>   include/hw/pci/pci_bus.h            | 10 ++++-----
>   hw/pci-bridge/pci_expander_bridge.c |  4 ++--
>   hw/pci/pci.c                        | 35 +++++++++++++++++++++--------
>   system/qdev-monitor.c               |  3 +++
>   6 files changed, 46 insertions(+), 21 deletions(-)

Tested-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>


ATB,

Mark.



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-07-07 22:06 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-07  8:40 [PATCH 0/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
2026-07-07  8:40 ` [PATCH 1/3] hw/pci: Have various pci_bus*() methods take a const PCIBus argument Philippe Mathieu-Daudé
2026-07-07  9:11   ` Thomas Huth
2026-07-07  8:40 ` [PATCH 2/3] hw/qdev: Introduce BusClass::is_full() handler Philippe Mathieu-Daudé
2026-07-07  8:40 ` [PATCH 3/3] hw/pci: Consider reserved slots mask when checking PCI bus is full Philippe Mathieu-Daudé
2026-07-07 10:20   ` Michael S. Tsirkin
2026-07-07 12:53     ` Philippe Mathieu-Daudé
2026-07-07 13:43       ` Michael S. Tsirkin
2026-07-07 22:05 ` [PATCH 0/3] " Mark Cave-Ayland

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.