diff options
author | Stefano Stabellini <sstabellini@kernel.org> | 2019-01-22 11:26:12 -0800 |
---|---|---|
committer | Stefano Stabellini <sstabellini@kernel.org> | 2019-01-22 11:45:10 -0800 |
commit | 621253ae4ba3f412f5dd6d0f5c151dc10caee55c (patch) | |
tree | 7d2f8ee0096c8465bfb8cb932373b4344c402076 | |
parent | 787a3b4322763284a594a5dd3680508c0bfb20b0 (diff) | |
download | xen-vring-fix.tar.gz |
xen: introduce xen_vring_use_dmavring-fix
Export xen_swiotlb on arm and arm64.
Use xen_swiotlb to determine when vring should use dma APIs to map the
ring: when xen_swiotlb is enabled the dma API is required. When it is
disabled, it is not required.
Signed-off-by: Stefano Stabellini <stefanos@xilinx.com>
-rw-r--r-- | arch/arm/include/asm/xen/swiotlb-xen.h | 1 | ||||
-rw-r--r-- | arch/arm/xen/mm.c | 3 | ||||
-rw-r--r-- | arch/arm64/include/asm/xen/swiotlb-xen.h | 1 | ||||
-rw-r--r-- | drivers/virtio/virtio_ring.c | 2 | ||||
-rw-r--r-- | include/xen/arm/swiotlb-xen.h | 10 | ||||
-rw-r--r-- | include/xen/xen.h | 6 |
6 files changed, 22 insertions, 1 deletions
diff --git a/arch/arm/include/asm/xen/swiotlb-xen.h b/arch/arm/include/asm/xen/swiotlb-xen.h new file mode 100644 index 00000000000000..455ade5d532054 --- /dev/null +++ b/arch/arm/include/asm/xen/swiotlb-xen.h @@ -0,0 +1 @@ +#include <xen/arm/swiotlb-xen.h> diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c index cb44aa290e73c5..8592863dd9d61b 100644 --- a/arch/arm/xen/mm.c +++ b/arch/arm/xen/mm.c @@ -21,6 +21,8 @@ #include <asm/xen/hypercall.h> #include <asm/xen/interface.h> +int xen_swiotlb __read_mostly; + unsigned long xen_get_swiotlb_free_pages(unsigned int order) { struct memblock_region *reg; @@ -189,6 +191,7 @@ int __init xen_mm_init(void) struct gnttab_cache_flush cflush; if (!xen_initial_domain()) return 0; + xen_swiotlb = 1; xen_swiotlb_init(1, false); xen_dma_ops = &xen_swiotlb_dma_ops; diff --git a/arch/arm64/include/asm/xen/swiotlb-xen.h b/arch/arm64/include/asm/xen/swiotlb-xen.h new file mode 100644 index 00000000000000..455ade5d532054 --- /dev/null +++ b/arch/arm64/include/asm/xen/swiotlb-xen.h @@ -0,0 +1 @@ +#include <xen/arm/swiotlb-xen.h> diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index cd7e755484e3be..bf8badc9e67fe9 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c @@ -260,7 +260,7 @@ static bool vring_use_dma_api(struct virtio_device *vdev) * the DMA API if we're a Xen guest, which at least allows * all of the sensible Xen configurations to work correctly. */ - if (xen_domain()) + if (xen_vring_use_dma()) return true; return false; diff --git a/include/xen/arm/swiotlb-xen.h b/include/xen/arm/swiotlb-xen.h new file mode 100644 index 00000000000000..2aac7c4bb3ed70 --- /dev/null +++ b/include/xen/arm/swiotlb-xen.h @@ -0,0 +1,10 @@ +#ifndef _ASM_ARM_XEN_SWIOTLB_XEN_H +#define _ASM_ARM_XEN_SWIOTLB_XEN_H + +#ifdef CONFIG_SWIOTLB_XEN +extern int xen_swiotlb; +#else +#define xen_swiotlb (0) +#endif + +#endif diff --git a/include/xen/xen.h b/include/xen/xen.h index 0e2156786ad29f..74a536d5e2af47 100644 --- a/include/xen/xen.h +++ b/include/xen/xen.h @@ -46,4 +46,10 @@ struct bio_vec; bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, const struct bio_vec *vec2); +#include <asm/xen/swiotlb-xen.h> +static inline int xen_vring_use_dma(void) +{ + return !!xen_swiotlb; +} + #endif /* _XEN_XEN_H */ |