From: Peng Fan <peng.fan@nxp.com>
To: sstabellini@kernel.org, boris.ostrovsky@oracle.com,
jgross@suse.com, konrad.wilk@oracle.com, mst@redhat.com,
jasowang@redhat.com
Cc: Peng Fan <peng.fan@nxp.com>,
x86@kernel.org, linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org,
iommu@lists.linux-foundation.org, linux-imx@nxp.com,
xen-devel@lists.xenproject.org,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH] xen: introduce xen_vring_use_dma
Date: Wed, 24 Jun 2020 17:17:32 +0800 [thread overview]
Message-ID: <20200624091732.23944-1-peng.fan@nxp.com> (raw)
Export xen_swiotlb for all platforms using xen swiotlb
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: Peng Fan <peng.fan@nxp.com>
---
V2:
This is a modified version from Stefano's patch
https://lore.kernel.org/patchwork/patch/1033801/#1222404
Note: This is not to address rpmsg virtio issue, this is
to let DomU virtio not using xen swiotlb could use non dma vring
on ARM64 platforms.
arch/arm/xen/mm.c | 1 +
arch/x86/include/asm/xen/swiotlb-xen.h | 2 --
arch/x86/xen/pci-swiotlb-xen.c | 2 --
drivers/virtio/virtio_ring.c | 2 +-
drivers/xen/swiotlb-xen.c | 3 +++
include/xen/swiotlb-xen.h | 6 ++++++
include/xen/xen.h | 6 ++++++
7 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/arch/arm/xen/mm.c b/arch/arm/xen/mm.c
index d40e9e5fc52b..6a493ea087f0 100644
--- a/arch/arm/xen/mm.c
+++ b/arch/arm/xen/mm.c
@@ -139,6 +139,7 @@ static 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);
cflush.op = 0;
diff --git a/arch/x86/include/asm/xen/swiotlb-xen.h b/arch/x86/include/asm/xen/swiotlb-xen.h
index 6b56d0d45d15..bb5ce02b4e20 100644
--- a/arch/x86/include/asm/xen/swiotlb-xen.h
+++ b/arch/x86/include/asm/xen/swiotlb-xen.h
@@ -3,12 +3,10 @@
#define _ASM_X86_SWIOTLB_XEN_H
#ifdef CONFIG_SWIOTLB_XEN
-extern int xen_swiotlb;
extern int __init pci_xen_swiotlb_detect(void);
extern void __init pci_xen_swiotlb_init(void);
extern int pci_xen_swiotlb_init_late(void);
#else
-#define xen_swiotlb (0)
static inline int __init pci_xen_swiotlb_detect(void) { return 0; }
static inline void __init pci_xen_swiotlb_init(void) { }
static inline int pci_xen_swiotlb_init_late(void) { return -ENXIO; }
diff --git a/arch/x86/xen/pci-swiotlb-xen.c b/arch/x86/xen/pci-swiotlb-xen.c
index 33293ce01d8d..071fbe0e1a91 100644
--- a/arch/x86/xen/pci-swiotlb-xen.c
+++ b/arch/x86/xen/pci-swiotlb-xen.c
@@ -18,8 +18,6 @@
#endif
#include <linux/export.h>
-int xen_swiotlb __read_mostly;
-
/*
* pci_xen_swiotlb_detect - set xen_swiotlb to 1 if necessary
*
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index a2de775801af..768afd79f67a 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -252,7 +252,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/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
index b6d27762c6f8..25747e72e6fe 100644
--- a/drivers/xen/swiotlb-xen.c
+++ b/drivers/xen/swiotlb-xen.c
@@ -40,6 +40,9 @@
#include <trace/events/swiotlb.h>
#define MAX_DMA_BITS 32
+
+int xen_swiotlb __read_mostly;
+
/*
* Used to do a quick range check in swiotlb_tbl_unmap_single and
* swiotlb_tbl_sync_single_*, to see if the memory was in fact allocated by this
diff --git a/include/xen/swiotlb-xen.h b/include/xen/swiotlb-xen.h
index ffc0d3902b71..235babcde848 100644
--- a/include/xen/swiotlb-xen.h
+++ b/include/xen/swiotlb-xen.h
@@ -12,4 +12,10 @@ void xen_dma_sync_for_device(dma_addr_t handle, phys_addr_t paddr, size_t size,
extern int xen_swiotlb_init(int verbose, bool early);
extern const struct dma_map_ops xen_swiotlb_dma_ops;
+#ifdef CONFIG_SWIOTLB_XEN
+extern int xen_swiotlb;
+#else
+#define xen_swiotlb (0)
+#endif
+
#endif /* __LINUX_SWIOTLB_XEN_H */
diff --git a/include/xen/xen.h b/include/xen/xen.h
index 19a72f591e2b..c51c46f5d739 100644
--- a/include/xen/xen.h
+++ b/include/xen/xen.h
@@ -52,4 +52,10 @@ bool xen_biovec_phys_mergeable(const struct bio_vec *vec1,
extern u64 xen_saved_max_mem_size;
#endif
+#include <xen/swiotlb-xen.h>
+static inline int xen_vring_use_dma(void)
+{
+ return !!xen_swiotlb;
+}
+
#endif /* _XEN_XEN_H */
--
2.16.4
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
next reply other threads:[~2020-06-24 8:53 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-24 9:17 Peng Fan [this message]
2020-06-24 9:06 ` [PATCH] xen: introduce xen_vring_use_dma Michael S. Tsirkin
2020-06-24 17:59 ` Stefano Stabellini
2020-06-24 20:47 ` Michael S. Tsirkin
2020-06-24 21:53 ` Stefano Stabellini
2020-06-24 22:16 ` Michael S. Tsirkin
2020-06-25 17:31 ` Stefano Stabellini
2020-06-26 15:32 ` Michael S. Tsirkin
2020-06-29 3:05 ` Peng Fan
2020-06-29 6:21 ` Michael S. Tsirkin
2020-06-29 6:25 ` Peng Fan
2020-06-29 6:33 ` Michael S. Tsirkin
2020-06-29 6:35 ` Peng Fan
2020-06-29 23:49 ` Stefano Stabellini
2020-06-30 1:40 ` Peng Fan
2020-06-29 23:46 ` Stefano Stabellini
2020-07-01 13:34 ` Christoph Hellwig
2020-07-01 17:34 ` Stefano Stabellini
2020-07-01 20:47 ` Michael S. Tsirkin
2020-07-01 21:23 ` Michael S. Tsirkin
2020-07-10 17:23 ` Stefano Stabellini
2020-07-11 18:44 ` Michael S. Tsirkin
2020-07-15 17:06 ` Stefano Stabellini
2020-07-13 1:53 ` Peng Fan
2020-06-29 3:00 ` Peng Fan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200624091732.23944-1-peng.fan@nxp.com \
--to=peng.fan@nxp.com \
--cc=boris.ostrovsky@oracle.com \
--cc=iommu@lists.linux-foundation.org \
--cc=jasowang@redhat.com \
--cc=jgross@suse.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=sstabellini@kernel.org \
--cc=virtualization@lists.linux-foundation.org \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).