The patch below does not apply to the 5.15-stable tree. If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to stable@vger.kernel.org.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y git checkout FETCH_HEAD git cherry-pick -x a63c357b9fd56ad5fe64616f5b22835252c6a76a # <resolve conflicts, build, test, etc.> git commit -s git send-email --to 'stable@vger.kernel.org' --in-reply-to '2024012226-unmanned-marshy-5819@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
a63c357b9fd5 ("iommu/dma: Trace bounce buffer usage when mapping buffers") f316ba0a8814 ("dma-iommu: Check that swiotlb is active before trying to use it") a17e3026bc4d ("iommu: Move flush queue data into iommu_dma_cookie") f7f07484542f ("iommu/iova: Move flush queue code to iommu-dma") ea4d71bb5e3f ("iommu/iova: Consolidate flush queue code") 87f60cc65d24 ("iommu/vt-d: Use put_pages_list") 649ad9835a37 ("iommu/iova: Squash flush_cb abstraction") d5c383f2c98a ("iommu/iova: Squash entry_dtor abstraction") d7061627d701 ("iommu/iova: Fix race between FQ timeout and teardown") 2e727bffbe93 ("iommu/dma: Check CONFIG_SWIOTLB more broadly") 9b49bbc2c4df ("iommu/dma: Fold _swiotlb helpers into callers") ee9d4097cc14 ("iommu/dma: Skip extra sync during unmap w/swiotlb") 06e620345d54 ("iommu/dma: Fix arch_sync_dma for map") 08ae5d4a1ae9 ("iommu/dma: Fix sync_sg with swiotlb")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From a63c357b9fd56ad5fe64616f5b22835252c6a76a Mon Sep 17 00:00:00 2001 From: "Isaac J. Manjarres" isaacmanjarres@google.com Date: Fri, 8 Dec 2023 15:41:40 -0800 Subject: [PATCH] iommu/dma: Trace bounce buffer usage when mapping buffers
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 85163a83df2f..037fcf826407 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -29,6 +29,7 @@ #include <linux/spinlock.h> #include <linux/swiotlb.h> #include <linux/vmalloc.h> +#include <trace/events/swiotlb.h>
#include "dma-iommu.h"
@@ -1156,6 +1157,8 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, return DMA_MAPPING_ERROR; }
+ trace_swiotlb_bounced(dev, phys, size); + aligned_size = iova_align(iovad, size); phys = swiotlb_tbl_map_single(dev, phys, size, aligned_size, iova_mask(iovad), dir, attrs);
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de (cherry picked from commit a63c357b9fd56ad5fe64616f5b22835252c6a76a) Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com --- drivers/iommu/dma-iommu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 48c6f7ff4aef..8cd63e6ccd2c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -25,6 +25,7 @@ #include <linux/vmalloc.h> #include <linux/crash_dump.h> #include <linux/dma-direct.h> +#include <trace/events/swiotlb.h>
struct iommu_dma_msi_page { struct list_head list; @@ -817,6 +818,8 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, void *padding_start; size_t padding_size, aligned_size;
+ trace_swiotlb_bounced(dev, phys, size, swiotlb_force); + aligned_size = iova_align(iovad, size); phys = swiotlb_tbl_map_single(dev, phys, size, aligned_size, iova_mask(iovad), dir, attrs);
On Mon, Jan 22, 2024 at 12:37:54PM -0800, Isaac J. Manjarres wrote:
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de (cherry picked from commit a63c357b9fd56ad5fe64616f5b22835252c6a76a) Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com
Now queued up, thanks.
greg k-h
On Mon, Jan 22, 2024 at 12:37:54PM -0800, Isaac J. Manjarres wrote:
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de (cherry picked from commit a63c357b9fd56ad5fe64616f5b22835252c6a76a) Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com
drivers/iommu/dma-iommu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 48c6f7ff4aef..8cd63e6ccd2c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -25,6 +25,7 @@ #include <linux/vmalloc.h> #include <linux/crash_dump.h> #include <linux/dma-direct.h> +#include <trace/events/swiotlb.h> struct iommu_dma_msi_page { struct list_head list; @@ -817,6 +818,8 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, void *padding_start; size_t padding_size, aligned_size;
trace_swiotlb_bounced(dev, phys, size, swiotlb_force);
Hi, this backported patch trying to access swiotlb_force variable is causing a build conflict where CONFIG_SWIOTLB is not enabled.
In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ kernel/drivers/iommu/dma-iommu.c:865:42: error: argument type 'enum SWIOTLB_NO_FORCE' is incomplete trace_swiotlb_bounced(dev, phys, size, swiotlb_force); ^~~~~~~~~~~~~ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^~~~~~~~~~~~~~~~ kernel/include/trace/events/swiotlb.h:15:9: note: forward declaration of 'enum SWIOTLB_NO_FORCE' enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE
--------------------------------------------------------------------------------------------------------------------------------------------------
I have a simple proposed fix which can resolve this compile time conflict when CONFIG_SWIOTLB is disabled.
--- a/include/trace/events/swiotlb.h +++ b/include/trace/events/swiotlb.h @@ -7,6 +7,7 @@
#include <linux/tracepoint.h>
+#ifdef CONFIG_SWIOTLB TRACE_EVENT(swiotlb_bounced,
TP_PROTO(struct device *dev, @@ -43,6 +44,9 @@ TRACE_EVENT(swiotlb_bounced, { SWIOTLB_FORCE, "FORCE" }, { SWIOTLB_NO_FORCE, "NO_FORCE" })) ); +#else +#define trace_swiotlb_bounced(dev, phys, size, swiotlb_force) +#endif /* CONFIG_SWIOTLB */
#endif /* _TRACE_SWIOTLB_H */
Thanks & regards, Bibek
aligned_size = iova_align(iovad, size); phys = swiotlb_tbl_map_single(dev, phys, size, aligned_size, iova_mask(iovad), dir, attrs);
-- 2.43.0.429.g432eaa2c6b-goog
On Thu, Jun 13, 2024 at 04:01:01PM +0530, Bibek Kumar Patro wrote:
On Mon, Jan 22, 2024 at 12:37:54PM -0800, Isaac J. Manjarres wrote:
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de (cherry picked from commit a63c357b9fd56ad5fe64616f5b22835252c6a76a) Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com
drivers/iommu/dma-iommu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 48c6f7ff4aef..8cd63e6ccd2c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -25,6 +25,7 @@ #include <linux/vmalloc.h> #include <linux/crash_dump.h> #include <linux/dma-direct.h> +#include <trace/events/swiotlb.h> struct iommu_dma_msi_page { struct list_head list; @@ -817,6 +818,8 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, void *padding_start; size_t padding_size, aligned_size;
trace_swiotlb_bounced(dev, phys, size, swiotlb_force);
Hi, this backported patch trying to access swiotlb_force variable is causing a build conflict where CONFIG_SWIOTLB is not enabled.
In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ kernel/drivers/iommu/dma-iommu.c:865:42: error: argument type 'enum SWIOTLB_NO_FORCE' is incomplete trace_swiotlb_bounced(dev, phys, size, swiotlb_force); ^~~~~~~~~~~~~ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^~~~~~~~~~~~~~~~ kernel/include/trace/events/swiotlb.h:15:9: note: forward declaration of 'enum SWIOTLB_NO_FORCE' enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE
I have a simple proposed fix which can resolve this compile time conflict when CONFIG_SWIOTLB is disabled.
--- a/include/trace/events/swiotlb.h +++ b/include/trace/events/swiotlb.h @@ -7,6 +7,7 @@
#include <linux/tracepoint.h>
+#ifdef CONFIG_SWIOTLB TRACE_EVENT(swiotlb_bounced,
TP_PROTO(struct device *dev,
@@ -43,6 +44,9 @@ TRACE_EVENT(swiotlb_bounced, { SWIOTLB_FORCE, "FORCE" }, { SWIOTLB_NO_FORCE, "NO_FORCE" })) ); +#else +#define trace_swiotlb_bounced(dev, phys, size, swiotlb_force) +#endif /* CONFIG_SWIOTLB */
#endif /* _TRACE_SWIOTLB_H */
Why not just take whatever change upstream fixes this instead of a one-off change?
thanks
greg k-h
On 6/13/2024 4:45 PM, Greg KH wrote:
On Thu, Jun 13, 2024 at 04:01:01PM +0530, Bibek Kumar Patro wrote:
On Mon, Jan 22, 2024 at 12:37:54PM -0800, Isaac J. Manjarres wrote:
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de (cherry picked from commit a63c357b9fd56ad5fe64616f5b22835252c6a76a) Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com
drivers/iommu/dma-iommu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 48c6f7ff4aef..8cd63e6ccd2c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -25,6 +25,7 @@ #include <linux/vmalloc.h> #include <linux/crash_dump.h> #include <linux/dma-direct.h> +#include <trace/events/swiotlb.h> struct iommu_dma_msi_page { struct list_head list; @@ -817,6 +818,8 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, void *padding_start; size_t padding_size, aligned_size;
trace_swiotlb_bounced(dev, phys, size, swiotlb_force);
Hi, this backported patch trying to access swiotlb_force variable is causing a build conflict where CONFIG_SWIOTLB is not enabled.
In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ kernel/drivers/iommu/dma-iommu.c:865:42: error: argument type 'enum SWIOTLB_NO_FORCE' is incomplete trace_swiotlb_bounced(dev, phys, size, swiotlb_force); ^~~~~~~~~~~~~ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^~~~~~~~~~~~~~~~ kernel/include/trace/events/swiotlb.h:15:9: note: forward declaration of 'enum SWIOTLB_NO_FORCE' enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE
I have a simple proposed fix which can resolve this compile time conflict when CONFIG_SWIOTLB is disabled.
--- a/include/trace/events/swiotlb.h +++ b/include/trace/events/swiotlb.h @@ -7,6 +7,7 @@
#include <linux/tracepoint.h>
+#ifdef CONFIG_SWIOTLB TRACE_EVENT(swiotlb_bounced,
TP_PROTO(struct device *dev,
@@ -43,6 +44,9 @@ TRACE_EVENT(swiotlb_bounced, { SWIOTLB_FORCE, "FORCE" }, { SWIOTLB_NO_FORCE, "NO_FORCE" })) ); +#else +#define trace_swiotlb_bounced(dev, phys, size, swiotlb_force) +#endif /* CONFIG_SWIOTLB */
#endif /* _TRACE_SWIOTLB_H */
Why not just take whatever change upstream fixes this instead of a one-off change?
I am currently checking the history on swiotlb_force and how it's removed in latest kernel versions. If those changes are applicable on this stable branch can we explore backporting those instead of this one- off change ?
Thanks & regards, Bibek
thanks
greg k-h
On Thu, Jun 13, 2024 at 11:10:57PM +0530, Bibek Kumar Patro wrote:
On 6/13/2024 4:45 PM, Greg KH wrote:
On Thu, Jun 13, 2024 at 04:01:01PM +0530, Bibek Kumar Patro wrote:
On Mon, Jan 22, 2024 at 12:37:54PM -0800, Isaac J. Manjarres wrote:
When commit 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") was introduced, it did not add the logic for tracing the bounce buffer usage from iommu_dma_map_page().
All of the users of swiotlb_tbl_map_single() trace their bounce buffer usage, except iommu_dma_map_page(). This makes it difficult to track SWIOTLB usage from that function. Thus, trace bounce buffer usage from iommu_dma_map_page().
Fixes: 82612d66d51d ("iommu: Allow the dma-iommu api to use bounce buffers") Cc: stable@vger.kernel.org # v5.15+ Cc: Tom Murphy murphyt7@tcd.ie Cc: Lu Baolu baolu.lu@linux.intel.com Cc: Saravana Kannan saravanak@google.com Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com Link: https://lore.kernel.org/r/20231208234141.2356157-1-isaacmanjarres@google.com Signed-off-by: Joerg Roedel jroedel@suse.de (cherry picked from commit a63c357b9fd56ad5fe64616f5b22835252c6a76a) Signed-off-by: Isaac J. Manjarres isaacmanjarres@google.com
drivers/iommu/dma-iommu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 48c6f7ff4aef..8cd63e6ccd2c 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -25,6 +25,7 @@ #include <linux/vmalloc.h> #include <linux/crash_dump.h> #include <linux/dma-direct.h> +#include <trace/events/swiotlb.h> struct iommu_dma_msi_page { struct list_head list; @@ -817,6 +818,8 @@ static dma_addr_t iommu_dma_map_page(struct device *dev, struct page *page, void *padding_start; size_t padding_size, aligned_size;
trace_swiotlb_bounced(dev, phys, size, swiotlb_force);
Hi, this backported patch trying to access swiotlb_force variable is causing a build conflict where CONFIG_SWIOTLB is not enabled.
In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ In file included from kernel/drivers/iommu/dma-iommu.c:28: kernel/include/trace/events/swiotlb.h:15:9: error: declaration of 'enum SWIOTLB_NO_FORCE' will not be visible outside of this function [-Werror,-Wvisibility] kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^ kernel/drivers/iommu/dma-iommu.c:865:42: error: argument type 'enum SWIOTLB_NO_FORCE' is incomplete trace_swiotlb_bounced(dev, phys, size, swiotlb_force); ^~~~~~~~~~~~~ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE ^~~~~~~~~~~~~~~~ kernel/include/trace/events/swiotlb.h:15:9: note: forward declaration of 'enum SWIOTLB_NO_FORCE' enum swiotlb_force swiotlb_force), ^ kernel/include/linux/swiotlb.h:143:23: note: expanded from macro 'swiotlb_force' #define swiotlb_force SWIOTLB_NO_FORCE
I have a simple proposed fix which can resolve this compile time conflict when CONFIG_SWIOTLB is disabled.
--- a/include/trace/events/swiotlb.h +++ b/include/trace/events/swiotlb.h @@ -7,6 +7,7 @@
#include <linux/tracepoint.h>
+#ifdef CONFIG_SWIOTLB TRACE_EVENT(swiotlb_bounced,
TP_PROTO(struct device *dev,
@@ -43,6 +44,9 @@ TRACE_EVENT(swiotlb_bounced, { SWIOTLB_FORCE, "FORCE" }, { SWIOTLB_NO_FORCE, "NO_FORCE" })) ); +#else +#define trace_swiotlb_bounced(dev, phys, size, swiotlb_force) +#endif /* CONFIG_SWIOTLB */
#endif /* _TRACE_SWIOTLB_H */
Why not just take whatever change upstream fixes this instead of a one-off change?
I am currently checking the history on swiotlb_force and how it's removed in latest kernel versions. If those changes are applicable on this stable branch can we explore backporting those instead of this one- off change ?
Please backport what is in the tree already.
linux-stable-mirror@lists.linaro.org