From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 08:20:59 +0000
Subject: [PATCH] kernel_5.10 no rt

---
 kernel/include/linux/io-mapping.h |   28 ++++++++++++++++++----------
 1 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/kernel/include/linux/io-mapping.h b/kernel/include/linux/io-mapping.h
index 4bb8223..c75e4d3 100644
--- a/kernel/include/linux/io-mapping.h
+++ b/kernel/include/linux/io-mapping.h
@@ -60,20 +60,22 @@
 	iomap_free(mapping->base, mapping->size);
 }
 
-/* Temporary mappings which are only valid in the current context */
+/* Atomic map/unmap */
 static inline void __iomem *
-io_mapping_map_local_wc(struct io_mapping *mapping, unsigned long offset)
+io_mapping_map_atomic_wc(struct io_mapping *mapping,
+			 unsigned long offset)
 {
 	resource_size_t phys_addr;
 
 	BUG_ON(offset >= mapping->size);
 	phys_addr = mapping->base + offset;
-	return __iomap_local_pfn_prot(PHYS_PFN(phys_addr), mapping->prot);
+	return iomap_atomic_prot_pfn(PHYS_PFN(phys_addr), mapping->prot);
 }
 
-static inline void io_mapping_unmap_local(void __iomem *vaddr)
+static inline void
+io_mapping_unmap_atomic(void __iomem *vaddr)
 {
-	kunmap_local_indexed((void __force *)vaddr);
+	iounmap_atomic(vaddr);
 }
 
 static inline void __iomem *
@@ -95,7 +97,7 @@
 	iounmap(vaddr);
 }
 
-#else  /* HAVE_ATOMIC_IOMAP */
+#else
 
 #include <linux/uaccess.h>
 
@@ -142,19 +144,25 @@
 {
 }
 
-/* Temporary mappings which are only valid in the current context */
+/* Atomic map/unmap */
 static inline void __iomem *
-io_mapping_map_local_wc(struct io_mapping *mapping, unsigned long offset)
+io_mapping_map_atomic_wc(struct io_mapping *mapping,
+			 unsigned long offset)
 {
+	preempt_disable();
+	pagefault_disable();
 	return io_mapping_map_wc(mapping, offset, PAGE_SIZE);
 }
 
-static inline void io_mapping_unmap_local(void __iomem *vaddr)
+static inline void
+io_mapping_unmap_atomic(void __iomem *vaddr)
 {
 	io_mapping_unmap(vaddr);
+	pagefault_enable();
+	preempt_enable();
 }
 
-#endif /* !HAVE_ATOMIC_IOMAP */
+#endif /* HAVE_ATOMIC_IOMAP */
 
 static inline struct io_mapping *
 io_mapping_create_wc(resource_size_t base,

--
Gitblit v1.6.2