Let's use our new helper functions. Note that virtio-pmem-pci is not
enabled for arm and, therefore, not compiled in.
Signed-off-by: David Hildenbrand <david@redhat.com>
---
hw/arm/virt.c | 81 ++++++++-------------------------------------------
1 file changed, 12 insertions(+), 69 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 8a4c663735..4ae1996d37 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -73,11 +73,10 @@
#include "hw/arm/smmuv3.h"
#include "hw/acpi/acpi.h"
#include "target/arm/internals.h"
-#include "hw/mem/memory-device.h"
#include "hw/mem/pc-dimm.h"
#include "hw/mem/nvdimm.h"
#include "hw/acpi/generic_event_device.h"
-#include "hw/virtio/virtio-mem-pci.h"
+#include "hw/virtio/virtio-md-pci.h"
#include "hw/virtio/virtio-iommu.h"
#include "hw/char/pl011.h"
#include "qemu/guest-random.h"
@@ -2740,64 +2739,6 @@ static void virt_memory_plug(HotplugHandler *hotplug_dev,
dev, &error_abort);
}
-static void virt_virtio_md_pci_pre_plug(HotplugHandler *hotplug_dev,
- DeviceState *dev, Error **errp)
-{
- HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev);
- Error *local_err = NULL;
-
- if (!hotplug_dev2 && dev->hotplugged) {
- /*
- * Without a bus hotplug handler, we cannot control the plug/unplug
- * order. We should never reach this point when hotplugging on ARM.
- * However, it's nice to add a safety net, similar to what we have
- * on x86.
- */
- error_setg(errp, "hotplug of virtio based memory devices not supported"
- " on this bus.");
- return;
- }
- /*
- * First, see if we can plug this memory device at all. If that
- * succeeds, branch of to the actual hotplug handler.
- */
- memory_device_pre_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev), NULL,
- &local_err);
- if (!local_err && hotplug_dev2) {
- hotplug_handler_pre_plug(hotplug_dev2, dev, &local_err);
- }
- error_propagate(errp, local_err);
-}
-
-static void virt_virtio_md_pci_plug(HotplugHandler *hotplug_dev,
- DeviceState *dev, Error **errp)
-{
- HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev);
- Error *local_err = NULL;
-
- /*
- * Plug the memory device first and then branch off to the actual
- * hotplug handler. If that one fails, we can easily undo the memory
- * device bits.
- */
- memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev));
- if (hotplug_dev2) {
- hotplug_handler_plug(hotplug_dev2, dev, &local_err);
- if (local_err) {
- memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev));
- }
- }
- error_propagate(errp, local_err);
-}
-
-static void virt_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev,
- DeviceState *dev, Error **errp)
-{
- /* We don't support hot unplug of virtio based memory devices */
- error_setg(errp, "virtio based memory devices cannot be unplugged.");
-}
-
-
static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
DeviceState *dev, Error **errp)
{
@@ -2805,8 +2746,8 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
virt_memory_pre_plug(hotplug_dev, dev, errp);
- } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
- virt_virtio_md_pci_pre_plug(hotplug_dev, dev, errp);
+ } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
+ virtio_md_pci_pre_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
} else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
hwaddr db_start = 0, db_end = 0;
char *resv_prop_str;
@@ -2855,12 +2796,11 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
SYS_BUS_DEVICE(dev));
}
}
+
if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
virt_memory_plug(hotplug_dev, dev, errp);
- }
-
- if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
- virt_virtio_md_pci_plug(hotplug_dev, dev, errp);
+ } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
+ virtio_md_pci_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
}
if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
@@ -2915,8 +2855,9 @@ static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev,
{
if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
virt_dimm_unplug_request(hotplug_dev, dev, errp);
- } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
- virt_virtio_md_pci_unplug_request(hotplug_dev, dev, errp);
+ } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
+ virtio_md_pci_unplug_request(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev),
+ errp);
} else {
error_setg(errp, "device unplug request for unsupported device"
" type: %s", object_get_typename(OBJECT(dev)));
@@ -2928,6 +2869,8 @@ static void virt_machine_device_unplug_cb(HotplugHandler *hotplug_dev,
{
if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
virt_dimm_unplug(hotplug_dev, dev, errp);
+ } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
+ virtio_md_pci_unplug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
} else {
error_setg(errp, "virt: device unplug for unsupported device"
" type: %s", object_get_typename(OBJECT(dev)));
@@ -2941,7 +2884,7 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
if (device_is_dynamic_sysbus(mc, dev) ||
object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) ||
- object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI) ||
+ object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI) ||
object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
return HOTPLUG_HANDLER(machine);
}
--
2.41.0
On Mon, Jul 10, 2023 at 12:07:10PM +0200, David Hildenbrand wrote:
> Let's use our new helper functions. Note that virtio-pmem-pci is not
> enabled for arm and, therefore, not compiled in.
>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
> hw/arm/virt.c | 81 ++++++++-------------------------------------------
> 1 file changed, 12 insertions(+), 69 deletions(-)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 8a4c663735..4ae1996d37 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -73,11 +73,10 @@
> #include "hw/arm/smmuv3.h"
> #include "hw/acpi/acpi.h"
> #include "target/arm/internals.h"
> -#include "hw/mem/memory-device.h"
> #include "hw/mem/pc-dimm.h"
> #include "hw/mem/nvdimm.h"
> #include "hw/acpi/generic_event_device.h"
> -#include "hw/virtio/virtio-mem-pci.h"
> +#include "hw/virtio/virtio-md-pci.h"
> #include "hw/virtio/virtio-iommu.h"
> #include "hw/char/pl011.h"
> #include "qemu/guest-random.h"
> @@ -2740,64 +2739,6 @@ static void virt_memory_plug(HotplugHandler *hotplug_dev,
> dev, &error_abort);
> }
>
> -static void virt_virtio_md_pci_pre_plug(HotplugHandler *hotplug_dev,
> - DeviceState *dev, Error **errp)
> -{
> - HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev);
> - Error *local_err = NULL;
> -
> - if (!hotplug_dev2 && dev->hotplugged) {
> - /*
> - * Without a bus hotplug handler, we cannot control the plug/unplug
> - * order. We should never reach this point when hotplugging on ARM.
> - * However, it's nice to add a safety net, similar to what we have
> - * on x86.
> - */
> - error_setg(errp, "hotplug of virtio based memory devices not supported"
> - " on this bus.");
> - return;
> - }
> - /*
> - * First, see if we can plug this memory device at all. If that
> - * succeeds, branch of to the actual hotplug handler.
> - */
> - memory_device_pre_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev), NULL,
> - &local_err);
> - if (!local_err && hotplug_dev2) {
> - hotplug_handler_pre_plug(hotplug_dev2, dev, &local_err);
> - }
> - error_propagate(errp, local_err);
> -}
> -
> -static void virt_virtio_md_pci_plug(HotplugHandler *hotplug_dev,
> - DeviceState *dev, Error **errp)
> -{
> - HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev);
> - Error *local_err = NULL;
> -
> - /*
> - * Plug the memory device first and then branch off to the actual
> - * hotplug handler. If that one fails, we can easily undo the memory
> - * device bits.
> - */
> - memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev));
> - if (hotplug_dev2) {
> - hotplug_handler_plug(hotplug_dev2, dev, &local_err);
> - if (local_err) {
> - memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev));
> - }
> - }
> - error_propagate(errp, local_err);
> -}
> -
> -static void virt_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev,
> - DeviceState *dev, Error **errp)
> -{
> - /* We don't support hot unplug of virtio based memory devices */
> - error_setg(errp, "virtio based memory devices cannot be unplugged.");
> -}
> -
> -
> static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
> DeviceState *dev, Error **errp)
> {
> @@ -2805,8 +2746,8 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
>
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_memory_pre_plug(hotplug_dev, dev, errp);
> - } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
> - virt_virtio_md_pci_pre_plug(hotplug_dev, dev, errp);
> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> + virtio_md_pci_pre_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> hwaddr db_start = 0, db_end = 0;
> char *resv_prop_str;
> @@ -2855,12 +2796,11 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
> SYS_BUS_DEVICE(dev));
> }
> }
> +
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_memory_plug(hotplug_dev, dev, errp);
> - }
> -
> - if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
> - virt_virtio_md_pci_plug(hotplug_dev, dev, errp);
> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> + virtio_md_pci_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
> }
>
> if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
How is this supposed to link if virtio-md is disabled at compile time?
Indeed I see this on mingw:
FAILED: qemu-system-aarch64.exe
i686-w64-mingw32-gcc -m32 @qemu-system-aarch64.exe.rsp
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_plug_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2803: undefined reference to `virtio_md_pci_plug'
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_unplug_request_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2859: undefined reference to `virtio_md_pci_unplug_request'
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_unplug_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2873: undefined reference to `virtio_md_pci_unplug'
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_pre_plug_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2750: undefined reference to `virtio_md_pci_pre_plug'
collect2: error: ld returned 1 exit status
[795/3838] Linking target qemu-system-aarch64w.exe
FAILED: qemu-system-aarch64w.exe
i686-w64-mingw32-gcc -m32 @qemu-system-aarch64w.exe.rsp
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_plug_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2803: undefined reference to `virtio_md_pci_plug'
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_unplug_request_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2859: undefined reference to `virtio_md_pci_unplug_request'
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_unplug_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2873: undefined reference to `virtio_md_pci_unplug'
/usr/lib/gcc/i686-w64-mingw32/12.2.1/../../../../i686-w64-mingw32/bin/ld: libqemu-aarch64-softmmu.fa.p/hw_arm_virt.c.obj: in function `virt_machine_device_pre_plug_cb':
/scm/qemu-mingw32-build/../qemu/hw/arm/virt.c:2750: undefined reference to `virtio_md_pci_pre_plug'
collect2: error: ld returned 1 exit status
[796/3838] Compiling C object libqemu-cris-softmmu.fa.p/fpu_softfloat.c.obj
[797/3838] Compiling C object libqemu-hppa-softmmu.fa.p/fpu_softfloat.c.obj
ninja: build stopped: subcommand failed.
make: *** [Makefile:162: run-ninja] Error 1
> @@ -2915,8 +2855,9 @@ static void virt_machine_device_unplug_request_cb(HotplugHandler *hotplug_dev,
> {
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_dimm_unplug_request(hotplug_dev, dev, errp);
> - } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
> - virt_virtio_md_pci_unplug_request(hotplug_dev, dev, errp);
> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> + virtio_md_pci_unplug_request(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev),
> + errp);
> } else {
> error_setg(errp, "device unplug request for unsupported device"
> " type: %s", object_get_typename(OBJECT(dev)));
> @@ -2928,6 +2869,8 @@ static void virt_machine_device_unplug_cb(HotplugHandler *hotplug_dev,
> {
> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> virt_dimm_unplug(hotplug_dev, dev, errp);
> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> + virtio_md_pci_unplug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
> } else {
> error_setg(errp, "virt: device unplug for unsupported device"
> " type: %s", object_get_typename(OBJECT(dev)));
> @@ -2941,7 +2884,7 @@ static HotplugHandler *virt_machine_get_hotplug_handler(MachineState *machine,
>
> if (device_is_dynamic_sysbus(mc, dev) ||
> object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM) ||
> - object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI) ||
> + object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI) ||
> object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> return HOTPLUG_HANDLER(machine);
> }
> --
> 2.41.0
On 10.07.23 23:40, Michael S. Tsirkin wrote:
> On Mon, Jul 10, 2023 at 12:07:10PM +0200, David Hildenbrand wrote:
>> Let's use our new helper functions. Note that virtio-pmem-pci is not
>> enabled for arm and, therefore, not compiled in.
>>
>> Signed-off-by: David Hildenbrand <david@redhat.com>
>> ---
>> hw/arm/virt.c | 81 ++++++++-------------------------------------------
>> 1 file changed, 12 insertions(+), 69 deletions(-)
>>
>> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
>> index 8a4c663735..4ae1996d37 100644
>> --- a/hw/arm/virt.c
>> +++ b/hw/arm/virt.c
>> @@ -73,11 +73,10 @@
>> #include "hw/arm/smmuv3.h"
>> #include "hw/acpi/acpi.h"
>> #include "target/arm/internals.h"
>> -#include "hw/mem/memory-device.h"
>> #include "hw/mem/pc-dimm.h"
>> #include "hw/mem/nvdimm.h"
>> #include "hw/acpi/generic_event_device.h"
>> -#include "hw/virtio/virtio-mem-pci.h"
>> +#include "hw/virtio/virtio-md-pci.h"
>> #include "hw/virtio/virtio-iommu.h"
>> #include "hw/char/pl011.h"
>> #include "qemu/guest-random.h"
>> @@ -2740,64 +2739,6 @@ static void virt_memory_plug(HotplugHandler *hotplug_dev,
>> dev, &error_abort);
>> }
>>
>> -static void virt_virtio_md_pci_pre_plug(HotplugHandler *hotplug_dev,
>> - DeviceState *dev, Error **errp)
>> -{
>> - HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev);
>> - Error *local_err = NULL;
>> -
>> - if (!hotplug_dev2 && dev->hotplugged) {
>> - /*
>> - * Without a bus hotplug handler, we cannot control the plug/unplug
>> - * order. We should never reach this point when hotplugging on ARM.
>> - * However, it's nice to add a safety net, similar to what we have
>> - * on x86.
>> - */
>> - error_setg(errp, "hotplug of virtio based memory devices not supported"
>> - " on this bus.");
>> - return;
>> - }
>> - /*
>> - * First, see if we can plug this memory device at all. If that
>> - * succeeds, branch of to the actual hotplug handler.
>> - */
>> - memory_device_pre_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev), NULL,
>> - &local_err);
>> - if (!local_err && hotplug_dev2) {
>> - hotplug_handler_pre_plug(hotplug_dev2, dev, &local_err);
>> - }
>> - error_propagate(errp, local_err);
>> -}
>> -
>> -static void virt_virtio_md_pci_plug(HotplugHandler *hotplug_dev,
>> - DeviceState *dev, Error **errp)
>> -{
>> - HotplugHandler *hotplug_dev2 = qdev_get_bus_hotplug_handler(dev);
>> - Error *local_err = NULL;
>> -
>> - /*
>> - * Plug the memory device first and then branch off to the actual
>> - * hotplug handler. If that one fails, we can easily undo the memory
>> - * device bits.
>> - */
>> - memory_device_plug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev));
>> - if (hotplug_dev2) {
>> - hotplug_handler_plug(hotplug_dev2, dev, &local_err);
>> - if (local_err) {
>> - memory_device_unplug(MEMORY_DEVICE(dev), MACHINE(hotplug_dev));
>> - }
>> - }
>> - error_propagate(errp, local_err);
>> -}
>> -
>> -static void virt_virtio_md_pci_unplug_request(HotplugHandler *hotplug_dev,
>> - DeviceState *dev, Error **errp)
>> -{
>> - /* We don't support hot unplug of virtio based memory devices */
>> - error_setg(errp, "virtio based memory devices cannot be unplugged.");
>> -}
>> -
>> -
>> static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
>> DeviceState *dev, Error **errp)
>> {
>> @@ -2805,8 +2746,8 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
>>
>> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
>> virt_memory_pre_plug(hotplug_dev, dev, errp);
>> - } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
>> - virt_virtio_md_pci_pre_plug(hotplug_dev, dev, errp);
>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
>> + virtio_md_pci_pre_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
>> } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
>> hwaddr db_start = 0, db_end = 0;
>> char *resv_prop_str;
>> @@ -2855,12 +2796,11 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
>> SYS_BUS_DEVICE(dev));
>> }
>> }
>> +
>> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
>> virt_memory_plug(hotplug_dev, dev, errp);
>> - }
>> -
>> - if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
>> - virt_virtio_md_pci_plug(hotplug_dev, dev, errp);
>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
>> + virtio_md_pci_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
>> }
>>
>> if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
>
>
> How is this supposed to link if virtio-md is disabled at compile time?
>
Good point.
The old code unconditionally enabled MEM_DEVICE, so we never required
subs for that.
We either need stubs or have to wrap this in #ifdef.
Stubs sound cleaner.
--
Cheers,
David / dhildenb
On Tue, Jul 11, 2023 at 10:32:31AM +0200, David Hildenbrand wrote:
> On 10.07.23 23:40, Michael S. Tsirkin wrote:
> > > @@ -2855,12 +2796,11 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
> > > SYS_BUS_DEVICE(dev));
> > > }
> > > }
> > > +
> > > if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
> > > virt_memory_plug(hotplug_dev, dev, errp);
> > > - }
> > > -
> > > - if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
> > > - virt_virtio_md_pci_plug(hotplug_dev, dev, errp);
> > > + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
> > > + virtio_md_pci_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
> > > }
> > > if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
> >
> >
> > How is this supposed to link if virtio-md is disabled at compile time?
> >
>
> Good point.
>
> The old code unconditionally enabled MEM_DEVICE, so we never required subs
> for that.
>
> We either need stubs or have to wrap this in #ifdef.
>
> Stubs sound cleaner.
That is what we usually do, yes.
--
MST
On 11.07.23 10:47, Michael S. Tsirkin wrote:
> On Tue, Jul 11, 2023 at 10:32:31AM +0200, David Hildenbrand wrote:
>> On 10.07.23 23:40, Michael S. Tsirkin wrote:
>>>> @@ -2855,12 +2796,11 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
>>>> SYS_BUS_DEVICE(dev));
>>>> }
>>>> }
>>>> +
>>>> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
>>>> virt_memory_plug(hotplug_dev, dev, errp);
>>>> - }
>>>> -
>>>> - if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
>>>> - virt_virtio_md_pci_plug(hotplug_dev, dev, errp);
>>>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
>>>> + virtio_md_pci_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
>>>> }
>>>> if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
>>>
>>>
>>> How is this supposed to link if virtio-md is disabled at compile time?
>>>
>>
>> Good point.
>>
>> The old code unconditionally enabled MEM_DEVICE, so we never required subs
>> for that.
>>
>> We either need stubs or have to wrap this in #ifdef.
>>
>> Stubs sound cleaner.
>
> That is what we usually do, yes.
>
I'm testing with the following:
diff --git a/stubs/meson.build b/stubs/meson.build
index a56645e2f7..160154912c 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -65,3 +65,4 @@ else
endif
stub_ss.add(files('semihost-all.c'))
stub_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_false: files('vfio-user-obj.c'))
+stub_ss.add(when: 'CONFIG_VIRTIO_MD', if_false: files('virtio_md_pci.c'))
diff --git a/stubs/virtio_md_pci.c b/stubs/virtio_md_pci.c
new file mode 100644
index 0000000000..ce5bba0c9d
--- /dev/null
+++ b/stubs/virtio_md_pci.c
@@ -0,0 +1,24 @@
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "hw/virtio/virtio-md-pci.h"
+
+void virtio_md_pci_pre_plug(VirtIOMDPCI *vmd, MachineState *ms, Error **errp)
+{
+ error_setg(errp, "virtio based memory devices not supported");
+}
+
+void virtio_md_pci_plug(VirtIOMDPCI *vmd, MachineState *ms, Error **errp)
+{
+ error_setg(errp, "virtio based memory devices not supported");
+}
+
+void virtio_md_pci_unplug_request(VirtIOMDPCI *vmd, MachineState *ms,
+ Error **errp)
+{
+ error_setg(errp, "virtio based memory devices not supported");
+}
+
+void virtio_md_pci_unplug(VirtIOMDPCI *vmd, MachineState *ms, Error **errp)
+{
+ error_setg(errp, "virtio based memory devices not supported");
+}
For now (not having virtio-md-ccw or virtio-md-mmio) this should do the trick I think.
--
Cheers,
David / dhildenb
On 11.07.23 11:22, David Hildenbrand wrote:
> On 11.07.23 10:47, Michael S. Tsirkin wrote:
>> On Tue, Jul 11, 2023 at 10:32:31AM +0200, David Hildenbrand wrote:
>>> On 10.07.23 23:40, Michael S. Tsirkin wrote:
>>>>> @@ -2855,12 +2796,11 @@ static void virt_machine_device_plug_cb(HotplugHandler *hotplug_dev,
>>>>> SYS_BUS_DEVICE(dev));
>>>>> }
>>>>> }
>>>>> +
>>>>> if (object_dynamic_cast(OBJECT(dev), TYPE_PC_DIMM)) {
>>>>> virt_memory_plug(hotplug_dev, dev, errp);
>>>>> - }
>>>>> -
>>>>> - if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MEM_PCI)) {
>>>>> - virt_virtio_md_pci_plug(hotplug_dev, dev, errp);
>>>>> + } else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_MD_PCI)) {
>>>>> + virtio_md_pci_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
>>>>> }
>>>>> if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
>>>>
>>>>
>>>> How is this supposed to link if virtio-md is disabled at compile time?
>>>>
>>>
>>> Good point.
>>>
>>> The old code unconditionally enabled MEM_DEVICE, so we never required subs
>>> for that.
>>>
>>> We either need stubs or have to wrap this in #ifdef.
>>>
>>> Stubs sound cleaner.
>>
>> That is what we usually do, yes.
>>
>
> I'm testing with the following:
>
>
> diff --git a/stubs/meson.build b/stubs/meson.build
> index a56645e2f7..160154912c 100644
> --- a/stubs/meson.build
> +++ b/stubs/meson.build
> @@ -65,3 +65,4 @@ else
> endif
> stub_ss.add(files('semihost-all.c'))
> stub_ss.add(when: 'CONFIG_VFIO_USER_SERVER', if_false: files('vfio-user-obj.c'))
> +stub_ss.add(when: 'CONFIG_VIRTIO_MD', if_false: files('virtio_md_pci.c'))
Needs to be
diff --git a/stubs/meson.build b/stubs/meson.build
index a56645e2f7..f16a365731 100644
--- a/stubs/meson.build
+++ b/stubs/meson.build
@@ -60,6 +60,7 @@ if have_system
stub_ss.add(files('semihost.c'))
stub_ss.add(files('usb-dev-stub.c'))
stub_ss.add(files('xen-hw-stub.c'))
+ stub_ss.add(files('virtio_md_pci.c'))
else
stub_ss.add(files('qdev.c'))
endif
Otherwise it still fails when building for multiple targets.
--
Cheers,
David / dhildenb
© 2016 - 2026 Red Hat, Inc.