From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50580) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yam6b-0000aj-9C for qemu-devel@nongnu.org; Wed, 25 Mar 2015 10:16:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yam6U-0007k7-Vp for qemu-devel@nongnu.org; Wed, 25 Mar 2015 10:16:25 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40024) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yam6U-0007jt-Oa for qemu-devel@nongnu.org; Wed, 25 Mar 2015 10:16:18 -0400 From: Markus Armbruster Date: Wed, 25 Mar 2015 15:16:09 +0100 Message-Id: <1427292969-30929-6-git-send-email-armbru@redhat.com> In-Reply-To: <1427292969-30929-1-git-send-email-armbru@redhat.com> References: <1427292969-30929-1-git-send-email-armbru@redhat.com> Subject: [Qemu-devel] [PATCH v2 for-2.3 5/5] sysbus: Make devices picking up backends unavailable with -device List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, Peter Crosthwaite , Michael Walle , Antony Pavlov , pbonzini@redhat.com, "Edgar E. Iglesias" Device models aren't supposed to go on fishing expeditions for backends. They should expose suitable properties for the user to set. For onboard devices, board code sets them. A number of sysbus devices pick up block backends in their init() / instance_init() methods with drive_get_next() instead: sl-nand, milkymist-memcard, pl181, generic-sdhci. Likewise, a number of sysbus devices pick up character backends in their init() / realize() methods with qemu_char_get_next_serial(): cadence_uart, digic-uart, etraxfs,serial, lm32-juart, lm32-uart, milkymist-uart, pl011, stm32f2xx-usart, xlnx.xps-uartlite. All these mistakes are already marked FIXME. See the commit that added these FIXMEs for a more detailed explanation of what's wrong. Fortunately, only machines ppce500 and pseries-* support -device with sysbus devices, and none of the devices above is supported with these machines. Set cannot_instantiate_with_device_add_yet to preserve our luck. Cc: Andrzej Zaborowski Cc: Peter Crosthwaite Cc: Antony Pavlov Cc: "Edgar E. Iglesias" Cc: Michael Walle Signed-off-by: Markus Armbruster --- hw/arm/spitz.c | 2 ++ hw/char/cadence_uart.c | 2 ++ hw/char/digic-uart.c | 2 ++ hw/char/etraxfs_ser.c | 2 ++ hw/char/lm32_juart.c | 2 ++ hw/char/lm32_uart.c | 2 ++ hw/char/milkymist-uart.c | 2 ++ hw/char/pl011.c | 2 ++ hw/char/stm32f2xx_usart.c | 2 ++ hw/char/xilinx_uartlite.c | 2 ++ hw/sd/milkymist-memcard.c | 2 ++ hw/sd/pl181.c | 2 ++ hw/sd/sdhci.c | 2 ++ 13 files changed, 26 insertions(+) diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c index da02932..5bf032a 100644 --- a/hw/arm/spitz.c +++ b/hw/arm/spitz.c @@ -1036,6 +1036,8 @@ static void sl_nand_class_init(ObjectClass *klass, void *data) k->init = sl_nand_init; dc->vmsd = &vmstate_sl_nand_info; dc->props = sl_nand_properties; + /* Reason: init() method uses drive_get() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo sl_nand_info = { diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index 4f38f0c..d145378 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -537,6 +537,8 @@ static void cadence_uart_class_init(ObjectClass *klass, void *data) dc->realize = cadence_uart_realize; dc->vmsd = &vmstate_cadence_uart; dc->reset = cadence_uart_reset; + /* Reason: realize() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo cadence_uart_info = { diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c index f272491..6d44576 100644 --- a/hw/char/digic-uart.c +++ b/hw/char/digic-uart.c @@ -177,6 +177,8 @@ static void digic_uart_class_init(ObjectClass *klass, void *data) dc->realize = digic_uart_realize; dc->reset = digic_uart_reset; dc->vmsd = &vmstate_digic_uart; + /* Reason: realize() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo digic_uart_info = { diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c index 3381b86..857c136 100644 --- a/hw/char/etraxfs_ser.c +++ b/hw/char/etraxfs_ser.c @@ -236,6 +236,8 @@ static void etraxfs_ser_class_init(ObjectClass *klass, void *data) k->init = etraxfs_ser_init; dc->reset = etraxfs_ser_reset; + /* Reason: init() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo etraxfs_ser_info = { diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c index 03285da..62763f2 100644 --- a/hw/char/lm32_juart.c +++ b/hw/char/lm32_juart.c @@ -145,6 +145,8 @@ static void lm32_juart_class_init(ObjectClass *klass, void *data) k->init = lm32_juart_init; dc->reset = juart_reset; dc->vmsd = &vmstate_lm32_juart; + /* Reason: init() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo lm32_juart_info = { diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c index 39cad49..837a46e 100644 --- a/hw/char/lm32_uart.c +++ b/hw/char/lm32_uart.c @@ -285,6 +285,8 @@ static void lm32_uart_class_init(ObjectClass *klass, void *data) k->init = lm32_uart_init; dc->reset = uart_reset; dc->vmsd = &vmstate_lm32_uart; + /* Reason: init() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo lm32_uart_info = { diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c index b79ea09..9b89b7e 100644 --- a/hw/char/milkymist-uart.c +++ b/hw/char/milkymist-uart.c @@ -235,6 +235,8 @@ static void milkymist_uart_class_init(ObjectClass *klass, void *data) dc->realize = milkymist_uart_realize; dc->reset = milkymist_uart_reset; dc->vmsd = &vmstate_milkymist_uart; + /* Reason: realize() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo milkymist_uart_info = { diff --git a/hw/char/pl011.c b/hw/char/pl011.c index d1cf00f..eac6fac 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -308,6 +308,8 @@ static void pl011_class_init(ObjectClass *oc, void *data) dc->realize = pl011_realize; dc->vmsd = &vmstate_pl011; + /* Reason: realize() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo pl011_arm_info = { diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c index 669c4e3..c9d3a1b 100644 --- a/hw/char/stm32f2xx_usart.c +++ b/hw/char/stm32f2xx_usart.c @@ -212,6 +212,8 @@ static void stm32f2xx_usart_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); dc->reset = stm32f2xx_usart_reset; + /* Reason: instance_init() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo stm32f2xx_usart_info = { diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index cb54684..ef883a8 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -228,6 +228,8 @@ static void xilinx_uartlite_class_init(ObjectClass *klass, void *data) dc->reset = xilinx_uartlite_reset; dc->realize = xilinx_uartlite_realize; + /* Reason: realize() method uses qemu_char_get_next_serial() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo xilinx_uartlite_info = { diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c index 0cc53d9..2209ef1 100644 --- a/hw/sd/milkymist-memcard.c +++ b/hw/sd/milkymist-memcard.c @@ -297,6 +297,8 @@ static void milkymist_memcard_class_init(ObjectClass *klass, void *data) k->init = milkymist_memcard_init; dc->reset = milkymist_memcard_reset; dc->vmsd = &vmstate_milkymist_memcard; + /* Reason: init() method uses drive_get_next() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo milkymist_memcard_info = { diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c index bf37da6..11fcd47 100644 --- a/hw/sd/pl181.c +++ b/hw/sd/pl181.c @@ -508,6 +508,8 @@ static void pl181_class_init(ObjectClass *klass, void *data) sdc->init = pl181_init; k->vmsd = &vmstate_pl181; k->reset = pl181_reset; + /* Reason: init() method uses drive_get_next() */ + k->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo pl181_info = { diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c index ab13505..e63367b 100644 --- a/hw/sd/sdhci.c +++ b/hw/sd/sdhci.c @@ -1297,6 +1297,8 @@ static void sdhci_sysbus_class_init(ObjectClass *klass, void *data) dc->vmsd = &sdhci_vmstate; dc->props = sdhci_properties; dc->realize = sdhci_sysbus_realize; + /* Reason: instance_init() method uses drive_get_next() */ + dc->cannot_instantiate_with_device_add_yet = true; } static const TypeInfo sdhci_sysbus_info = { -- 1.9.3