Message ID | 1650646263-22047-7-git-send-email-olekstysh@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | virtio: Solution to restrict memory access under Xen using xen-grant DMA-mapping layer | expand |
On Fri, 22 Apr 2022, Oleksandr Tyshchenko wrote: > From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> > > As the main (and single at the moment) purpose of xen-grant > DMA devices is to enable using virtio devices in Xen guests > in a safe manner, assign xen-grant DMA ops only if restricted > access to the guest memory is enabled. > > Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > Changes RFC -> V1: > - update commit subject/description > - remove #ifdef CONFIG_XEN_VIRTIO > - re-organize the check taking into the account that > swiotlb and virtio cases are mutually exclusive > - update according to the new naming scheme: > s/virtio/grant_dma > --- > include/xen/arm/xen-ops.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/include/xen/arm/xen-ops.h b/include/xen/arm/xen-ops.h > index 288deb1..26954e5 100644 > --- a/include/xen/arm/xen-ops.h > +++ b/include/xen/arm/xen-ops.h > @@ -2,12 +2,17 @@ > #ifndef _ASM_ARM_XEN_OPS_H > #define _ASM_ARM_XEN_OPS_H > > +#include <linux/virtio_config.h> > #include <xen/swiotlb-xen.h> > +#include <xen/xen-ops.h> > > static inline void xen_setup_dma_ops(struct device *dev) > { > #ifdef CONFIG_XEN > - if (xen_swiotlb_detect()) > + if (arch_has_restricted_virtio_memory_access() && > + xen_is_grant_dma_device(dev)) > + xen_grant_setup_dma_ops(dev); > + else if (xen_swiotlb_detect()) > dev->dma_ops = &xen_swiotlb_dma_ops; > #endif > } > -- > 2.7.4 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >
On Fri, Apr 22, 2022 at 07:51:03PM +0300, Oleksandr Tyshchenko wrote: > static inline void xen_setup_dma_ops(struct device *dev) > { > #ifdef CONFIG_XEN > - if (xen_swiotlb_detect()) > + if (arch_has_restricted_virtio_memory_access() && > + xen_is_grant_dma_device(dev)) > + xen_grant_setup_dma_ops(dev); > + else if (xen_swiotlb_detect()) I don't think that arch_has_restricted_virtio_memory_access check should be there as it still is a bit of a layering violation.
On 23.04.22 19:42, Christoph Hellwig wrote: Hello Christoph > On Fri, Apr 22, 2022 at 07:51:03PM +0300, Oleksandr Tyshchenko wrote: >> static inline void xen_setup_dma_ops(struct device *dev) >> { >> #ifdef CONFIG_XEN >> - if (xen_swiotlb_detect()) >> + if (arch_has_restricted_virtio_memory_access() && >> + xen_is_grant_dma_device(dev)) >> + xen_grant_setup_dma_ops(dev); >> + else if (xen_swiotlb_detect()) > I don't think that arch_has_restricted_virtio_memory_access > check should be there as it still is a bit of a layering violation. Well, I will remove it then (and update commit description). For virtualized but non-virtio devices, it is not needed at all. For the virtio devices, this check is already present at virtio.c:virtio_features_ok() >
diff --git a/include/xen/arm/xen-ops.h b/include/xen/arm/xen-ops.h index 288deb1..26954e5 100644 --- a/include/xen/arm/xen-ops.h +++ b/include/xen/arm/xen-ops.h @@ -2,12 +2,17 @@ #ifndef _ASM_ARM_XEN_OPS_H #define _ASM_ARM_XEN_OPS_H +#include <linux/virtio_config.h> #include <xen/swiotlb-xen.h> +#include <xen/xen-ops.h> static inline void xen_setup_dma_ops(struct device *dev) { #ifdef CONFIG_XEN - if (xen_swiotlb_detect()) + if (arch_has_restricted_virtio_memory_access() && + xen_is_grant_dma_device(dev)) + xen_grant_setup_dma_ops(dev); + else if (xen_swiotlb_detect()) dev->dma_ops = &xen_swiotlb_dma_ops; #endif }