diff mbox

[for-1.6] pxa2xx: Avoid object_get_link_property() assertion for "parent_bus"

Message ID 1375621501-5564-1-git-send-email-afaerber@suse.de
State New
Headers show

Commit Message

Andreas Färber Aug. 4, 2013, 1:05 p.m. UTC
pxa2xx_i2c_init() creates a pxa2xx-i2c-slave device on a second i2c-bus,
which has a NULL parent device. This causes an assertion in
object_get_canonical_path() when accessing pxa2xx-i2c-slave's
"parent_bus" link<bus> property in tosa and likely other PXA2xx machines.

Fix this by using the pxa2xx_i2c device, created just before, as parent.

Signed-off-by: Andreas Färber <afaerber@suse.de>
---
 hw/arm/pxa2xx.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Andreas Färber Aug. 4, 2013, 1:17 p.m. UTC | #1
Am 04.08.2013 15:05, schrieb Andreas Färber:
> pxa2xx_i2c_init() creates a pxa2xx-i2c-slave device on a second i2c-bus,
> which has a NULL parent device. This causes an assertion in
> object_get_canonical_path() when accessing pxa2xx-i2c-slave's
> "parent_bus" link<bus> property in tosa and likely other PXA2xx machines.
> 
> Fix this by using the pxa2xx_i2c device, created just before, as parent.
> 
> Signed-off-by: Andreas Färber <afaerber@suse.de>

CC'ing Anthony as this may be lurking elsewhere, too.

Unfortunately qtest can still only send QMP command but does not return
the response, so we can't generically test walking the QOM composition
tree in my proposed qom-test.

Andreas

> ---
>  hw/arm/pxa2xx.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 7de6453..17ddd3f 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -1479,6 +1479,7 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
>      DeviceState *dev;
>      SysBusDevice *i2c_dev;
>      PXA2xxI2CState *s;
> +    i2c_bus *i2cbus;
>  
>      dev = qdev_create(NULL, TYPE_PXA2XX_I2C);
>      qdev_prop_set_uint32(dev, "size", region_size + 1);
> @@ -1491,7 +1492,8 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
>  
>      s = PXA2XX_I2C(i2c_dev);
>      /* FIXME: Should the slave device really be on a separate bus?  */
> -    dev = i2c_create_slave(i2c_init_bus(NULL, "dummy"), "pxa2xx-i2c-slave", 0);
> +    i2cbus = i2c_init_bus(dev, "dummy");
> +    dev = i2c_create_slave(i2cbus, "pxa2xx-i2c-slave", 0);
>      s->slave = FROM_I2C_SLAVE(PXA2xxI2CSlaveState, I2C_SLAVE(dev));
>      s->slave->host = s;
>
Anthony Liguori Aug. 14, 2013, 4:27 p.m. UTC | #2
Applied.  Thanks.

Regards,

Anthony Liguori
diff mbox

Patch

diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index 7de6453..17ddd3f 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -1479,6 +1479,7 @@  PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
     DeviceState *dev;
     SysBusDevice *i2c_dev;
     PXA2xxI2CState *s;
+    i2c_bus *i2cbus;
 
     dev = qdev_create(NULL, TYPE_PXA2XX_I2C);
     qdev_prop_set_uint32(dev, "size", region_size + 1);
@@ -1491,7 +1492,8 @@  PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
 
     s = PXA2XX_I2C(i2c_dev);
     /* FIXME: Should the slave device really be on a separate bus?  */
-    dev = i2c_create_slave(i2c_init_bus(NULL, "dummy"), "pxa2xx-i2c-slave", 0);
+    i2cbus = i2c_init_bus(dev, "dummy");
+    dev = i2c_create_slave(i2cbus, "pxa2xx-i2c-slave", 0);
     s->slave = FROM_I2C_SLAVE(PXA2xxI2CSlaveState, I2C_SLAVE(dev));
     s->slave->host = s;