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