[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 3/9] ppc/pnv: use dev->parent_bus->parent to get the PHB
From: |
Daniel Henrique Barboza |
Subject: |
[PATCH v2 3/9] ppc/pnv: use dev->parent_bus->parent to get the PHB |
Date: |
Sat, 18 Jun 2022 08:01:56 -0300 |
It is not advisable to execute an object_dynamic_cast() to poke into
bus->qbus.parent and follow it up with a C cast into the PnvPHB type we
think we got.
A better way is to access the PnvPHB object via a QOM macro accessing
the existing parent links of the DeviceState. For a given
pnv-phb3/4-root-port 'dev', dev->parent_bus will give us the PHB bus,
and dev->parent_bus->parent is the PHB. Use the adequate QOM macro to
assert the type, and keep the NULL check in case we didn't get the
object we were expecting.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
hw/pci-host/pnv_phb3.c | 10 +++++++---
hw/pci-host/pnv_phb4.c | 10 +++++++---
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/hw/pci-host/pnv_phb3.c b/hw/pci-host/pnv_phb3.c
index 4ba660f8b9..5e7f827415 100644
--- a/hw/pci-host/pnv_phb3.c
+++ b/hw/pci-host/pnv_phb3.c
@@ -1139,12 +1139,16 @@ static void pnv_phb3_root_port_realize(DeviceState
*dev, Error **errp)
{
PCIERootPortClass *rpc = PCIE_ROOT_PORT_GET_CLASS(dev);
PCIDevice *pci = PCI_DEVICE(dev);
- PCIBus *bus = pci_get_bus(pci);
PnvPHB3 *phb = NULL;
Error *local_err = NULL;
- phb = (PnvPHB3 *) object_dynamic_cast(OBJECT(bus->qbus.parent),
- TYPE_PNV_PHB3);
+ /*
+ * dev->parent_bus gives access to the pnv-phb-root bus.
+ * The PnvPHB3 is the owner (parent) of the bus.
+ */
+ if (dev->parent_bus) {
+ phb = PNV_PHB3(dev->parent_bus->parent);
+ }
if (!phb) {
error_setg(errp,
diff --git a/hw/pci-host/pnv_phb4.c b/hw/pci-host/pnv_phb4.c
index ffd9d8a947..a0ee52e820 100644
--- a/hw/pci-host/pnv_phb4.c
+++ b/hw/pci-host/pnv_phb4.c
@@ -1782,12 +1782,16 @@ static void pnv_phb4_root_port_realize(DeviceState
*dev, Error **errp)
{
PCIERootPortClass *rpc = PCIE_ROOT_PORT_GET_CLASS(dev);
PCIDevice *pci = PCI_DEVICE(dev);
- PCIBus *bus = pci_get_bus(pci);
PnvPHB4 *phb = NULL;
Error *local_err = NULL;
- phb = (PnvPHB4 *) object_dynamic_cast(OBJECT(bus->qbus.parent),
- TYPE_PNV_PHB4);
+ /*
+ * dev->parent_bus gives access to the pnv-phb-root bus.
+ * The PnvPHB4 is the owner (parent) of the bus.
+ */
+ if (dev->parent_bus) {
+ phb = PNV_PHB4(dev->parent_bus->parent);
+ }
if (!phb) {
error_setg(errp, "%s must be connected to pnv-phb4 buses", dev->id);
--
2.36.1
- [PATCH v2 0/9] pnv-phb related cleanups, Daniel Henrique Barboza, 2022/06/18
- [PATCH v2 1/9] ppc/pnv: move root port attach to pnv_phb4_realize(), Daniel Henrique Barboza, 2022/06/18
- [PATCH v2 2/9] ppc/pnv: attach phb3/phb4 root ports in QOM tree, Daniel Henrique Barboza, 2022/06/18
- [PATCH v2 3/9] ppc/pnv: use dev->parent_bus->parent to get the PHB,
Daniel Henrique Barboza <=
- [PATCH v2 4/9] ppc/pnv: use dev instead of pci->qdev in root_port_realize(), Daniel Henrique Barboza, 2022/06/18
- [PATCH v2 7/9] ppc/pnv: make pnv_chip_power8_pic_print_info() use chip8->phbs[], Daniel Henrique Barboza, 2022/06/18
- [PATCH v2 5/9] ppc/pnv: make pnv_ics_get() use the chip8->phbs[] array, Daniel Henrique Barboza, 2022/06/18
- [PATCH v2 6/9] ppc/pnv: make pnv_ics_resend() use chip8->phbs[], Daniel Henrique Barboza, 2022/06/18