Commit 0e13150c authored by Thomas Fourier's avatar Thomas Fourier Committed by Benjamin Tissoires
Browse files

HID: Intel-thc-hid: Intel-thc: fix dma_unmap_sg() nents value



The `dma_unmap_sg()` functions should be called with the same nents as the
`dma_map_sg()`, not the value the map function returned.

Save the number of entries in struct thc_dma_configuration.

Fixes: a688404b ("HID: intel-thc-hid: intel-thc: Add THC DMA interfaces")
Signed-off-by: default avatarThomas Fourier <fourier.thomas@gmail.com>
Reviewed-by: default avatarEven Xu <even.xu@intel.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarBenjamin Tissoires <bentiss@kernel.org>
parent e9143268
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ static int setup_dma_buffers(struct thc_device *dev,
		return 0;

	memset(config->sgls, 0, sizeof(config->sgls));
	memset(config->sgls_nent_pages, 0, sizeof(config->sgls_nent_pages));
	memset(config->sgls_nent, 0, sizeof(config->sgls_nent));

	cpu_addr = dma_alloc_coherent(dev->dev, prd_tbls_size,
@@ -254,6 +255,7 @@ static int setup_dma_buffers(struct thc_device *dev,
		}
		count = dma_map_sg(dev->dev, config->sgls[i], nent, dir);

		config->sgls_nent_pages[i] = nent;
		config->sgls_nent[i] = count;
	}

@@ -299,7 +301,7 @@ static void release_dma_buffers(struct thc_device *dev,
			continue;

		dma_unmap_sg(dev->dev, config->sgls[i],
			     config->sgls_nent[i],
			     config->sgls_nent_pages[i],
			     config->dir);

		sgl_free(config->sgls[i]);
+2 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ struct thc_prd_table {
 * @dir: Direction of DMA for this config
 * @prd_tbls: PRD tables for current DMA
 * @sgls: Array of pointers to scatter-gather lists
 * @sgls_nent_pages: Number of pages per scatter-gather list
 * @sgls_nent: Actual number of entries per scatter-gather list
 * @prd_tbl_num: Actual number of PRD tables
 * @max_packet_size: Size of the buffer needed for 1 DMA message (1 PRD table)
@@ -107,6 +108,7 @@ struct thc_dma_configuration {

	struct thc_prd_table *prd_tbls;
	struct scatterlist *sgls[PRD_TABLES_NUM];
	u8 sgls_nent_pages[PRD_TABLES_NUM];
	u8 sgls_nent[PRD_TABLES_NUM];
	u8 prd_tbl_num;