On Tue, 18 Aug 2020 16:58:30 +0200...
Pierre Morel <pmorel@xxxxxxxxxxxxx> wrote:
+config ARCH_HAS_RESTRICTED_MEMORY_ACCESS
+ bool
+ help
+ This option is selected by any architecture enforcing
+ VIRTIO_F_IOMMU_PLATFORM
This option is only for a very specific case of "restricted memory
access", namely the kind that requires IOMMU_PLATFORM for virtio
devices. ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS? Or is this intended
to cover cases outside of virtio as well?
+
menuconfig VIRTIO_MENU
bool "Virtio drivers"
default y
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index a977e32a88f2..1471db7d6510 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -176,6 +176,10 @@ int virtio_finalize_features(struct virtio_device *dev)
if (ret)
return ret;
+ ret = arch_has_restricted_memory_access(dev);
+ if (ret)
+ return ret;
Hm, I'd rather have expected something like
if (arch_has_restricted_memory_access(dev)) {
// enforce VERSION_1 and IOMMU_PLATFORM
}
Otherwise, you're duplicating the checks in the individual architecture
callbacks again.
[Not sure whether the device argument would be needed here; are there
architectures where we'd only require IOMMU_PLATFORM for a subset of
virtio devices?]