intel_th: msu: Fix single mode with disabled IOMMU [Linux 4.9.187]

This Linux kernel change "intel_th: msu: Fix single mode with disabled IOMMU" is included in the Linux 4.9.187 release. This change is authored by Alexander Shishkin <alexander.shishkin [at] linux.intel.com> on Fri Jun 21 19:19:29 2019 +0300. The commit for this change in Linux stable tree is 69978cf (patch) which is from upstream commit 918b864. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 918b864.

intel_th: msu: Fix single mode with disabled IOMMU

commit 918b8646497b5dba6ae82d4a7325f01b258972b9 upstream.

Commit 4e0eaf239fb3 ("intel_th: msu: Fix single mode with IOMMU") switched
the single mode code to use dma mapping pages obtained from the page
allocator, but with IOMMU disabled, that may lead to using SWIOTLB bounce
buffers and without additional sync'ing, produces empty trace buffers.

Fix this by using a DMA32 GFP flag to the page allocation in single mode,
as the device supports full 32-bit DMA addressing.

Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Fixes: 4e0eaf239fb3 ("intel_th: msu: Fix single mode with IOMMU")
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reported-by: Ammy Yi <ammy.yi@intel.com>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20190621161930.60785-4-alexander.shishkin@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

There are 2 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/hwtracing/intel_th/msu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
index aadae9d..7bdd1bf 100644
--- a/drivers/hwtracing/intel_th/msu.c
+++ b/drivers/hwtracing/intel_th/msu.c
@@ -638,7 +638,7 @@ static int msc_buffer_contig_alloc(struct msc *msc, unsigned long size)
        goto err_out;

    ret = -ENOMEM;
-   page = alloc_pages(GFP_KERNEL | __GFP_ZERO, order);
+   page = alloc_pages(GFP_KERNEL | __GFP_ZERO | GFP_DMA32, order);
    if (!page)
        goto err_free_sgt;

Leave a Reply

Your email address will not be published. Required fields are marked *