hw/virtio/Kconfig | 11 +++++++++++ 1 file changed, 11 insertions(+)
Virtio memory devices rely on PCI BARs to expose the contents of memory.
Because of this they cannot be used (yet) with virtio-mmio or virtio-ccw.
In fact the code that is common to virtio-mem and virtio-pmem, which
is in hw/virtio/virtio-md-pci.c, is only included if CONFIG_VIRTIO_PCI
is set. Reproduce the same condition in the Kconfig file, only allowing
VIRTIO_MEM and VIRTIO_PMEM to be defined if the transport supports it.
Without this patch it is possible to create a configuration with
CONFIG_VIRTIO_PCI=n and CONFIG_VIRTIO_MEM=y, but that causes a
linking failure.
Cc: David Hildenbrand <david@redhat.com>
Reported-by: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
hw/virtio/Kconfig | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig
index aa63ff7fd41..0afec2ae929 100644
--- a/hw/virtio/Kconfig
+++ b/hw/virtio/Kconfig
@@ -16,6 +16,7 @@ config VIRTIO_PCI
default y if PCI_DEVICES
depends on PCI
select VIRTIO
+ select VIRTIO_MD_SUPPORTED
config VIRTIO_MMIO
bool
@@ -35,10 +36,17 @@ config VIRTIO_CRYPTO
default y
depends on VIRTIO
+# not all virtio transports support memory devices; if none does,
+# no need to include the code
+config VIRTIO_MD_SUPPORTED
+ bool
+
config VIRTIO_MD
bool
+ depends on VIRTIO_MD_SUPPORTED
select MEM_DEVICE
+# selected by the board if it has the required support code
config VIRTIO_PMEM_SUPPORTED
bool
@@ -46,9 +54,11 @@ config VIRTIO_PMEM
bool
default y
depends on VIRTIO
+ depends on VIRTIO_MD_SUPPORTED
depends on VIRTIO_PMEM_SUPPORTED
select VIRTIO_MD
+# selected by the board if it has the required support code
config VIRTIO_MEM_SUPPORTED
bool
@@ -57,6 +67,7 @@ config VIRTIO_MEM
default y
depends on VIRTIO
depends on LINUX
+ depends on VIRTIO_MD_SUPPORTED
depends on VIRTIO_MEM_SUPPORTED
select VIRTIO_MD
--
2.46.0
> Virtio memory devices rely on PCI BARs to expose the contents of memory. > Because of this they cannot be used (yet) with virtio-mmio or virtio-ccw. > In fact the code that is common to virtio-mem and virtio-pmem, which > is in hw/virtio/virtio-md-pci.c, is only included if CONFIG_VIRTIO_PCI > is set. Reproduce the same condition in the Kconfig file, only allowing > VIRTIO_MEM and VIRTIO_PMEM to be defined if the transport supports it. > > Without this patch it is possible to create a configuration with > CONFIG_VIRTIO_PCI=n and CONFIG_VIRTIO_MEM=y, but that causes a > linking failure. Just curious what is required to make virtio-mem & virtio-pmem compatible with virtio-mmio? Maybe late but still: Reviewed-by: Pankaj Gupta <pankaj.gupta@amd.com> Thanks, Pankaj > > Cc: David Hildenbrand <david@redhat.com> > Reported-by: Michael Tokarev <mjt@tls.msk.ru> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > hw/virtio/Kconfig | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig > index aa63ff7fd41..0afec2ae929 100644 > --- a/hw/virtio/Kconfig > +++ b/hw/virtio/Kconfig > @@ -16,6 +16,7 @@ config VIRTIO_PCI > default y if PCI_DEVICES > depends on PCI > select VIRTIO > + select VIRTIO_MD_SUPPORTED > > config VIRTIO_MMIO > bool > @@ -35,10 +36,17 @@ config VIRTIO_CRYPTO > default y > depends on VIRTIO > > +# not all virtio transports support memory devices; if none does, > +# no need to include the code > +config VIRTIO_MD_SUPPORTED > + bool > + > config VIRTIO_MD > bool > + depends on VIRTIO_MD_SUPPORTED > select MEM_DEVICE > > +# selected by the board if it has the required support code > config VIRTIO_PMEM_SUPPORTED > bool > > @@ -46,9 +54,11 @@ config VIRTIO_PMEM > bool > default y > depends on VIRTIO > + depends on VIRTIO_MD_SUPPORTED > depends on VIRTIO_PMEM_SUPPORTED > select VIRTIO_MD > > +# selected by the board if it has the required support code > config VIRTIO_MEM_SUPPORTED > bool > > @@ -57,6 +67,7 @@ config VIRTIO_MEM > default y > depends on VIRTIO > depends on LINUX > + depends on VIRTIO_MD_SUPPORTED > depends on VIRTIO_MEM_SUPPORTED > select VIRTIO_MD > > -- > 2.46.0 > >
On 25.09.24 09:39, Pankaj Gupta wrote: >> Virtio memory devices rely on PCI BARs to expose the contents of memory. >> Because of this they cannot be used (yet) with virtio-mmio or virtio-ccw. >> In fact the code that is common to virtio-mem and virtio-pmem, which >> is in hw/virtio/virtio-md-pci.c, is only included if CONFIG_VIRTIO_PCI >> is set. Reproduce the same condition in the Kconfig file, only allowing >> VIRTIO_MEM and VIRTIO_PMEM to be defined if the transport supports it. >> >> Without this patch it is possible to create a configuration with >> CONFIG_VIRTIO_PCI=n and CONFIG_VIRTIO_MEM=y, but that causes a >> linking failure. > > Just curious what is required to make virtio-mem & virtio-pmem compatible with > virtio-mmio? I assume not that much: primarily implementing the virtio-md-mmio abstraction, and the virtio-mem-mmio/virtio-pmem-mmio proxy devices. Then, it needs to be wired up in the machine hotplug code. I posted the virtio-ccw variant a couple of days ago [1]. > > Maybe late but still: > Reviewed-by: Pankaj Gupta <pankaj.gupta@amd.com> I already sent a merge request that includes this change. If I have to resend it, I'll include that. Thanks! [1] https://lkml.kernel.org/r/20240910175809.2135596-1-david@redhat.com -- Cheers, David / dhildenb
On 06.09.24 12:16, Paolo Bonzini wrote: > Virtio memory devices rely on PCI BARs to expose the contents of memory. > Because of this they cannot be used (yet) with virtio-mmio or virtio-ccw. > In fact the code that is common to virtio-mem and virtio-pmem, which > is in hw/virtio/virtio-md-pci.c, is only included if CONFIG_VIRTIO_PCI > is set. Reproduce the same condition in the Kconfig file, only allowing > VIRTIO_MEM and VIRTIO_PMEM to be defined if the transport supports it. > > Without this patch it is possible to create a configuration with > CONFIG_VIRTIO_PCI=n and CONFIG_VIRTIO_MEM=y, but that causes a > linking failure. I'll queue this to https://github.com/davidhildenbrand/qemu.git mem-next and drop it if someone beats me to up-streaming it :) -- Cheers, David / dhildenb
On 06.09.24 12:16, Paolo Bonzini wrote: > Virtio memory devices rely on PCI BARs to expose the contents of memory. > Because of this they cannot be used (yet) with virtio-mmio or virtio-ccw. > In fact the code that is common to virtio-mem and virtio-pmem, which > is in hw/virtio/virtio-md-pci.c, is only included if CONFIG_VIRTIO_PCI > is set. Reproduce the same condition in the Kconfig file, only allowing > VIRTIO_MEM and VIRTIO_PMEM to be defined if the transport supports it. > > Without this patch it is possible to create a configuration with > CONFIG_VIRTIO_PCI=n and CONFIG_VIRTIO_MEM=y, but that causes a > linking failure. > > Cc: David Hildenbrand <david@redhat.com> > Reported-by: Michael Tokarev <mjt@tls.msk.ru> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- Reviewed-by: David Hildenbrand <david@redhat.com> Thanks! -- Cheers, David / dhildenb
© 2016 - 2024 Red Hat, Inc.