Re: [patch 1/4] sparc/mm/highmem: Flush cache and TLB

2021-01-12 Thread Andreas Larsson



On 2021-01-12 18:01, Thomas Gleixner wrote:

The recent conversion to the generic kmap_local infrastructure failed to
assign the proper pre/post map/unmap flush operations for sparc.

Sparc requires cache flush before map/unmap and tlb flush afterwards.

Fixes: 3293efa97807 ("sparc/mm/highmem: Switch to generic kmap atomic")
Reported-by: Andreas Larsson 
Signed-off-by: Thomas Gleixner 
Cc: "David S. Miller" 
Cc: sparcli...@vger.kernel.org
---
  arch/sparc/include/asm/highmem.h |9 +
  1 file changed, 5 insertions(+), 4 deletions(-)

--- a/arch/sparc/include/asm/highmem.h
+++ b/arch/sparc/include/asm/highmem.h
@@ -50,10 +50,11 @@ extern pte_t *pkmap_page_table;
  
  #define flush_cache_kmaps()	flush_cache_all()
  
-/* FIXME: Use __flush_tlb_one(vaddr) instead of flush_cache_all() -- Anton */

-#define arch_kmap_local_post_map(vaddr, pteval)flush_cache_all()
-#define arch_kmap_local_post_unmap(vaddr)  flush_cache_all()
-
+/* FIXME: Use __flush_*_one(vaddr) instead of flush_*_all() -- Anton */
+#define arch_kmap_local_pre_map(vaddr, pteval) flush_cache_all()
+#define arch_kmap_local_pre_unmap(vaddr)   flush_cache_all()
+#define arch_kmap_local_post_map(vaddr, pteval)flush_tlb_all()
+#define arch_kmap_local_post_unmap(vaddr)  flush_tlb_all()
  
  #endif /* __KERNEL__ */


Yes! I found, just an hour before your patched was posted, that an
equivalent fix helped back where the switch-to-generic patch first
occurred. This patch was successfully tested on master.

Tested-by: Andreas Larsson 

--
Andreas Larsson
Cobham Gaisler


[patch 1/4] sparc/mm/highmem: Flush cache and TLB

2021-01-12 Thread Thomas Gleixner
The recent conversion to the generic kmap_local infrastructure failed to
assign the proper pre/post map/unmap flush operations for sparc.

Sparc requires cache flush before map/unmap and tlb flush afterwards.

Fixes: 3293efa97807 ("sparc/mm/highmem: Switch to generic kmap atomic")
Reported-by: Andreas Larsson 
Signed-off-by: Thomas Gleixner 
Cc: "David S. Miller" 
Cc: sparcli...@vger.kernel.org
---
 arch/sparc/include/asm/highmem.h |9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

--- a/arch/sparc/include/asm/highmem.h
+++ b/arch/sparc/include/asm/highmem.h
@@ -50,10 +50,11 @@ extern pte_t *pkmap_page_table;
 
 #define flush_cache_kmaps()flush_cache_all()
 
-/* FIXME: Use __flush_tlb_one(vaddr) instead of flush_cache_all() -- Anton */
-#define arch_kmap_local_post_map(vaddr, pteval)flush_cache_all()
-#define arch_kmap_local_post_unmap(vaddr)  flush_cache_all()
-
+/* FIXME: Use __flush_*_one(vaddr) instead of flush_*_all() -- Anton */
+#define arch_kmap_local_pre_map(vaddr, pteval) flush_cache_all()
+#define arch_kmap_local_pre_unmap(vaddr)   flush_cache_all()
+#define arch_kmap_local_post_map(vaddr, pteval)flush_tlb_all()
+#define arch_kmap_local_post_unmap(vaddr)  flush_tlb_all()
 
 #endif /* __KERNEL__ */