Inter-revision diff: patch 3

Comparing v9 (message) to v14 (message)

--- v9
+++ v14
@@ -2,32 +2,43 @@
 could help simplify the code for other pools.
 
 Signed-off-by: Claire Chang <tientzu@chromium.org>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Tested-by: Stefano Stabellini <sstabellini@kernel.org>
+Tested-by: Will Deacon <will@kernel.org>
+Acked-by: Stefano Stabellini <sstabellini@kernel.org>
 ---
- drivers/of/device.c     | 3 +++
- include/linux/device.h  | 4 ++++
- include/linux/swiotlb.h | 8 ++++++++
- kernel/dma/swiotlb.c    | 8 ++++----
- 4 files changed, 19 insertions(+), 4 deletions(-)
+ drivers/base/core.c    | 4 ++++
+ include/linux/device.h | 4 ++++
+ kernel/dma/swiotlb.c   | 8 ++++----
+ 3 files changed, 12 insertions(+), 4 deletions(-)
 
-diff --git a/drivers/of/device.c b/drivers/of/device.c
-index c5a9473a5fb1..1defdf15ba95 100644
---- a/drivers/of/device.c
-+++ b/drivers/of/device.c
-@@ -165,6 +165,9 @@ int of_dma_configure_id(struct device *dev, struct device_node *np,
+diff --git a/drivers/base/core.c b/drivers/base/core.c
+index f29839382f81..cb3123e3954d 100644
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -27,6 +27,7 @@
+ #include <linux/netdevice.h>
+ #include <linux/sched/signal.h>
+ #include <linux/sched/mm.h>
++#include <linux/swiotlb.h>
+ #include <linux/sysfs.h>
+ #include <linux/dma-map-ops.h> /* for dma_default_coherent */
  
- 	arch_setup_dma_ops(dev, dma_start, size, iommu, coherent);
+@@ -2736,6 +2737,9 @@ void device_initialize(struct device *dev)
+     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
+ 	dev->dma_coherent = dma_default_coherent;
+ #endif
++#ifdef CONFIG_SWIOTLB
++	dev->dma_io_tlb_mem = io_tlb_default_mem;
++#endif
+ }
+ EXPORT_SYMBOL_GPL(device_initialize);
  
-+	if (IS_ENABLED(CONFIG_SWIOTLB))
-+		swiotlb_set_io_tlb_default_mem(dev);
-+
- 	return 0;
- }
- EXPORT_SYMBOL_GPL(of_dma_configure_id);
 diff --git a/include/linux/device.h b/include/linux/device.h
-index 4443e12238a0..2e9a378c9100 100644
+index ba660731bd25..240d652a0696 100644
 --- a/include/linux/device.h
 +++ b/include/linux/device.h
-@@ -432,6 +432,7 @@ struct dev_links_info {
+@@ -416,6 +416,7 @@ struct dev_links_info {
   * @dma_pools:	Dma pools (if dma'ble device).
   * @dma_mem:	Internal for coherent mem override.
   * @cma_area:	Contiguous memory area for dma allocations
@@ -35,7 +46,7 @@
   * @archdata:	For arch-specific additions.
   * @of_node:	Associated device tree node.
   * @fwnode:	Associated device node supplied by platform firmware.
-@@ -540,6 +541,9 @@ struct device {
+@@ -518,6 +519,9 @@ struct device {
  #ifdef CONFIG_DMA_CMA
  	struct cma *cma_area;		/* contiguous memory area for dma
  					   allocations */
@@ -45,46 +56,20 @@
  #endif
  	/* arch specific additions */
  	struct dev_archdata	archdata;
-diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
-index 216854a5e513..008125ccd509 100644
---- a/include/linux/swiotlb.h
-+++ b/include/linux/swiotlb.h
-@@ -108,6 +108,11 @@ static inline bool is_swiotlb_buffer(phys_addr_t paddr)
- 	return mem && paddr >= mem->start && paddr < mem->end;
- }
- 
-+static inline void swiotlb_set_io_tlb_default_mem(struct device *dev)
-+{
-+	dev->dma_io_tlb_mem = io_tlb_default_mem;
-+}
-+
- void __init swiotlb_exit(void);
- unsigned int swiotlb_max_segment(void);
- size_t swiotlb_max_mapping_size(struct device *dev);
-@@ -119,6 +124,9 @@ static inline bool is_swiotlb_buffer(phys_addr_t paddr)
- {
- 	return false;
- }
-+static inline void swiotlb_set_io_tlb_default_mem(struct device *dev)
-+{
-+}
- static inline void swiotlb_exit(void)
- {
- }
 diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
-index 8a3e2b3b246d..29b950ab1351 100644
+index ede66df6835b..72a4289faed1 100644
 --- a/kernel/dma/swiotlb.c
 +++ b/kernel/dma/swiotlb.c
-@@ -344,7 +344,7 @@ void __init swiotlb_exit(void)
+@@ -340,7 +340,7 @@ void __init swiotlb_exit(void)
  static void swiotlb_bounce(struct device *dev, phys_addr_t tlb_addr, size_t size,
  			   enum dma_data_direction dir)
  {
 -	struct io_tlb_mem *mem = io_tlb_default_mem;
 +	struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
  	int index = (tlb_addr - mem->start) >> IO_TLB_SHIFT;
+ 	unsigned int offset = (tlb_addr - mem->start) & (IO_TLB_SIZE - 1);
  	phys_addr_t orig_addr = mem->slots[index].orig_addr;
- 	size_t alloc_size = mem->slots[index].alloc_size;
-@@ -426,7 +426,7 @@ static unsigned int wrap_index(struct io_tlb_mem *mem, unsigned int index)
+@@ -431,7 +431,7 @@ static unsigned int wrap_index(struct io_tlb_mem *mem, unsigned int index)
  static int find_slots(struct device *dev, phys_addr_t orig_addr,
  		size_t alloc_size)
  {
@@ -93,7 +78,7 @@
  	unsigned long boundary_mask = dma_get_seg_boundary(dev);
  	dma_addr_t tbl_dma_addr =
  		phys_to_dma_unencrypted(dev, mem->start) & boundary_mask;
-@@ -503,7 +503,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr,
+@@ -508,7 +508,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr,
  		size_t mapping_size, size_t alloc_size,
  		enum dma_data_direction dir, unsigned long attrs)
  {
@@ -102,7 +87,7 @@
  	unsigned int offset = swiotlb_align_offset(dev, orig_addr);
  	unsigned int i;
  	int index;
-@@ -554,7 +554,7 @@ void swiotlb_tbl_unmap_single(struct device *hwdev, phys_addr_t tlb_addr,
+@@ -559,7 +559,7 @@ void swiotlb_tbl_unmap_single(struct device *hwdev, phys_addr_t tlb_addr,
  			      size_t mapping_size, enum dma_data_direction dir,
  			      unsigned long attrs)
  {
@@ -112,5 +97,5 @@
  	unsigned int offset = swiotlb_align_offset(hwdev, tlb_addr);
  	int index = (tlb_addr - offset - mem->start) >> IO_TLB_SHIFT;
 -- 
-2.32.0.272.g935e593368-goog
+2.32.0.288.g62a8d224e6-goog
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help