|
|
0a122b |
From 8aa43c6e4e8def26812cb435b9f3c3146488e3bd Mon Sep 17 00:00:00 2001
|
|
|
0a122b |
From: Markus Armbruster <armbru@redhat.com>
|
|
|
0a122b |
Date: Thu, 16 Jan 2014 15:25:18 -0500
|
|
|
0a122b |
Subject: [PATCH 12/14] hw: cannot_instantiate_with_device_add_yet due to
|
|
|
0a122b |
pointer props
|
|
|
0a122b |
MIME-Version: 1.0
|
|
|
0a122b |
Content-Type: text/plain; charset=UTF-8
|
|
|
0a122b |
Content-Transfer-Encoding: 8bit
|
|
|
0a122b |
|
|
|
0a122b |
Message-id: <1389885919-16158-2-git-send-email-armbru@redhat.com>
|
|
|
0a122b |
Patchwork-id: 56750
|
|
|
0a122b |
O-Subject: [PATCH 7.0 qemu-kvm 1/2] hw: cannot_instantiate_with_device_add_yet due to pointer props
|
|
|
0a122b |
Bugzilla: 1031098
|
|
|
0a122b |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
0a122b |
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
0a122b |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
0a122b |
|
|
|
0a122b |
Pointer properties can be set only by code, not by device_add. A
|
|
|
0a122b |
device with a pointer property can work with device_add only when the
|
|
|
0a122b |
property may remain null.
|
|
|
0a122b |
|
|
|
0a122b |
This is the case for property "interrupt_vector" of device
|
|
|
0a122b |
"etraxfs,pic". Add a comment there.
|
|
|
0a122b |
|
|
|
0a122b |
Set cannot_instantiate_with_device_add_yet for the other devices with
|
|
|
0a122b |
pointer properties, with a comment explaining why.
|
|
|
0a122b |
|
|
|
0a122b |
Juha Riihimäki and Peter Maydell deserve my thanks for making "pointer
|
|
|
0a122b |
property must not remain null" blatantly obvious in the OMAP devices.
|
|
|
0a122b |
|
|
|
0a122b |
Only device "smbus-eeprom" is actually changed. The others are all
|
|
|
0a122b |
sysbus devices, which get cannot_instantiate_with_device_add_yet set
|
|
|
0a122b |
in their abstract base's class init function. Setting it again in
|
|
|
0a122b |
their class init function is technically redundant, but serves as
|
|
|
0a122b |
insurance for when sysbus devices become available with device_add,
|
|
|
0a122b |
and as documentation.
|
|
|
0a122b |
|
|
|
0a122b |
Signed-off-by: Markus Armbruster <armbru@redhat.com>
|
|
|
0a122b |
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@gmail.com> (for ETRAX)
|
|
|
0a122b |
Signed-off-by: Andreas Färber <afaerber@suse.de>
|
|
|
0a122b |
(cherry picked from commit 1b111dc1216be2a89770fdc1ab3dfa8025957442)
|
|
|
0a122b |
---
|
|
|
0a122b |
hw/audio/marvell_88w8618.c | 2 ++
|
|
|
0a122b |
hw/dma/sparc32_dma.c | 2 ++
|
|
|
0a122b |
hw/gpio/omap_gpio.c | 4 ++++
|
|
|
0a122b |
hw/i2c/omap_i2c.c | 2 ++
|
|
|
0a122b |
hw/i2c/smbus_eeprom.c | 2 ++
|
|
|
0a122b |
hw/intc/etraxfs_pic.c | 4 ++++
|
|
|
0a122b |
hw/intc/grlib_irqmp.c | 2 ++
|
|
|
0a122b |
hw/intc/omap_intc.c | 4 ++++
|
|
|
0a122b |
hw/net/etraxfs_eth.c | 2 ++
|
|
|
0a122b |
hw/net/lance.c | 2 ++
|
|
|
0a122b |
10 files changed, 26 insertions(+)
|
|
|
0a122b |
|
|
|
0a122b |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
0a122b |
---
|
|
|
0a122b |
hw/audio/marvell_88w8618.c | 2 ++
|
|
|
0a122b |
hw/dma/sparc32_dma.c | 2 ++
|
|
|
0a122b |
hw/gpio/omap_gpio.c | 4 ++++
|
|
|
0a122b |
hw/i2c/omap_i2c.c | 2 ++
|
|
|
0a122b |
hw/i2c/smbus_eeprom.c | 2 ++
|
|
|
0a122b |
hw/intc/etraxfs_pic.c | 4 ++++
|
|
|
0a122b |
hw/intc/grlib_irqmp.c | 2 ++
|
|
|
0a122b |
hw/intc/omap_intc.c | 4 ++++
|
|
|
0a122b |
hw/net/etraxfs_eth.c | 2 ++
|
|
|
0a122b |
hw/net/lance.c | 2 ++
|
|
|
0a122b |
10 files changed, 26 insertions(+)
|
|
|
0a122b |
|
|
|
0a122b |
diff --git a/hw/audio/marvell_88w8618.c b/hw/audio/marvell_88w8618.c
|
|
|
0a122b |
index de06dfd..4f7196a 100644
|
|
|
0a122b |
--- a/hw/audio/marvell_88w8618.c
|
|
|
0a122b |
+++ b/hw/audio/marvell_88w8618.c
|
|
|
0a122b |
@@ -285,6 +285,8 @@ static void mv88w8618_audio_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
dc->reset = mv88w8618_audio_reset;
|
|
|
0a122b |
dc->vmsd = &mv88w8618_audio_vmsd;
|
|
|
0a122b |
dc->props = mv88w8618_audio_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "wm8750" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo mv88w8618_audio_info = {
|
|
|
0a122b |
diff --git a/hw/dma/sparc32_dma.c b/hw/dma/sparc32_dma.c
|
|
|
0a122b |
index fd21533..c866da7 100644
|
|
|
0a122b |
--- a/hw/dma/sparc32_dma.c
|
|
|
0a122b |
+++ b/hw/dma/sparc32_dma.c
|
|
|
0a122b |
@@ -298,6 +298,8 @@ static void sparc32_dma_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
dc->reset = dma_reset;
|
|
|
0a122b |
dc->vmsd = &vmstate_dma;
|
|
|
0a122b |
dc->props = sparc32_dma_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "iommu_opaque" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo sparc32_dma_info = {
|
|
|
0a122b |
diff --git a/hw/gpio/omap_gpio.c b/hw/gpio/omap_gpio.c
|
|
|
0a122b |
index f5eeaea..3f423dd 100644
|
|
|
0a122b |
--- a/hw/gpio/omap_gpio.c
|
|
|
0a122b |
+++ b/hw/gpio/omap_gpio.c
|
|
|
0a122b |
@@ -745,6 +745,8 @@ static void omap_gpio_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
k->init = omap_gpio_init;
|
|
|
0a122b |
dc->reset = omap_gpif_reset;
|
|
|
0a122b |
dc->props = omap_gpio_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "clk" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo omap_gpio_info = {
|
|
|
0a122b |
@@ -774,6 +776,8 @@ static void omap2_gpio_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
k->init = omap2_gpio_init;
|
|
|
0a122b |
dc->reset = omap2_gpif_reset;
|
|
|
0a122b |
dc->props = omap2_gpio_properties;
|
|
|
0a122b |
+ /* Reason: pointer properties "iclk", "fclk0", ..., "fclk5" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo omap2_gpio_info = {
|
|
|
0a122b |
diff --git a/hw/i2c/omap_i2c.c b/hw/i2c/omap_i2c.c
|
|
|
0a122b |
index efb2254..464308e 100644
|
|
|
0a122b |
--- a/hw/i2c/omap_i2c.c
|
|
|
0a122b |
+++ b/hw/i2c/omap_i2c.c
|
|
|
0a122b |
@@ -469,6 +469,8 @@ static void omap_i2c_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
k->init = omap_i2c_init;
|
|
|
0a122b |
dc->props = omap_i2c_properties;
|
|
|
0a122b |
dc->reset = omap_i2c_reset;
|
|
|
0a122b |
+ /* Reason: pointer properties "iclk", "fclk" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo omap_i2c_info = {
|
|
|
0a122b |
diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c
|
|
|
0a122b |
index 0154283..0218f8a 100644
|
|
|
0a122b |
--- a/hw/i2c/smbus_eeprom.c
|
|
|
0a122b |
+++ b/hw/i2c/smbus_eeprom.c
|
|
|
0a122b |
@@ -121,6 +121,8 @@ static void smbus_eeprom_class_initfn(ObjectClass *klass, void *data)
|
|
|
0a122b |
sc->write_data = eeprom_write_data;
|
|
|
0a122b |
sc->read_data = eeprom_read_data;
|
|
|
0a122b |
dc->props = smbus_eeprom_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "data" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo smbus_eeprom_info = {
|
|
|
0a122b |
diff --git a/hw/intc/etraxfs_pic.c b/hw/intc/etraxfs_pic.c
|
|
|
0a122b |
index 635103c..57650c4 100644
|
|
|
0a122b |
--- a/hw/intc/etraxfs_pic.c
|
|
|
0a122b |
+++ b/hw/intc/etraxfs_pic.c
|
|
|
0a122b |
@@ -163,6 +163,10 @@ static void etraxfs_pic_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
|
|
|
0a122b |
k->init = etraxfs_pic_init;
|
|
|
0a122b |
dc->props = etraxfs_pic_properties;
|
|
|
0a122b |
+ /*
|
|
|
0a122b |
+ * Note: pointer property "interrupt_vector" may remain null, thus
|
|
|
0a122b |
+ * no need for dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
+ */
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo etraxfs_pic_info = {
|
|
|
0a122b |
diff --git a/hw/intc/grlib_irqmp.c b/hw/intc/grlib_irqmp.c
|
|
|
0a122b |
index 68dfe6a..1cfa960 100644
|
|
|
0a122b |
--- a/hw/intc/grlib_irqmp.c
|
|
|
0a122b |
+++ b/hw/intc/grlib_irqmp.c
|
|
|
0a122b |
@@ -368,6 +368,8 @@ static void grlib_irqmp_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
k->init = grlib_irqmp_init;
|
|
|
0a122b |
dc->reset = grlib_irqmp_reset;
|
|
|
0a122b |
dc->props = grlib_irqmp_properties;
|
|
|
0a122b |
+ /* Reason: pointer properties "set_pil_in", "set_pil_in_opaque" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo grlib_irqmp_info = {
|
|
|
0a122b |
diff --git a/hw/intc/omap_intc.c b/hw/intc/omap_intc.c
|
|
|
0a122b |
index 875eba4..e846fd6 100644
|
|
|
0a122b |
--- a/hw/intc/omap_intc.c
|
|
|
0a122b |
+++ b/hw/intc/omap_intc.c
|
|
|
0a122b |
@@ -387,6 +387,8 @@ static void omap_intc_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
k->init = omap_intc_init;
|
|
|
0a122b |
dc->reset = omap_inth_reset;
|
|
|
0a122b |
dc->props = omap_intc_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "clk" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo omap_intc_info = {
|
|
|
0a122b |
@@ -631,6 +633,8 @@ static void omap2_intc_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
k->init = omap2_intc_init;
|
|
|
0a122b |
dc->reset = omap_inth_reset;
|
|
|
0a122b |
dc->props = omap2_intc_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "iclk", "fclk" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo omap2_intc_info = {
|
|
|
0a122b |
diff --git a/hw/net/etraxfs_eth.c b/hw/net/etraxfs_eth.c
|
|
|
0a122b |
index 1039913..374eb5a 100644
|
|
|
0a122b |
--- a/hw/net/etraxfs_eth.c
|
|
|
0a122b |
+++ b/hw/net/etraxfs_eth.c
|
|
|
0a122b |
@@ -639,6 +639,8 @@ static void etraxfs_eth_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
|
|
|
0a122b |
k->init = fs_eth_init;
|
|
|
0a122b |
dc->props = etraxfs_eth_properties;
|
|
|
0a122b |
+ /* Reason: pointer properties "dma_out", "dma_in" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo etraxfs_eth_info = {
|
|
|
0a122b |
diff --git a/hw/net/lance.c b/hw/net/lance.c
|
|
|
0a122b |
index 90641e7..df62dcb 100644
|
|
|
0a122b |
--- a/hw/net/lance.c
|
|
|
0a122b |
+++ b/hw/net/lance.c
|
|
|
0a122b |
@@ -154,6 +154,8 @@ static void lance_class_init(ObjectClass *klass, void *data)
|
|
|
0a122b |
dc->reset = lance_reset;
|
|
|
0a122b |
dc->vmsd = &vmstate_lance;
|
|
|
0a122b |
dc->props = lance_properties;
|
|
|
0a122b |
+ /* Reason: pointer property "dma" */
|
|
|
0a122b |
+ dc->cannot_instantiate_with_device_add_yet = true;
|
|
|
0a122b |
}
|
|
|
0a122b |
|
|
|
0a122b |
static const TypeInfo lance_info = {
|
|
|
0a122b |
--
|
|
|
0a122b |
1.8.3.1
|
|
|
0a122b |
|