diff options
Diffstat (limited to 'include/linux/io-mapping.h')
| -rw-r--r-- | include/linux/io-mapping.h | 38 | 
1 files changed, 34 insertions, 4 deletions
diff --git a/include/linux/io-mapping.h b/include/linux/io-mapping.h index c75e4d3d8833..c093e81310a9 100644 --- a/include/linux/io-mapping.h +++ b/include/linux/io-mapping.h @@ -69,13 +69,32 @@ io_mapping_map_atomic_wc(struct io_mapping *mapping,  	BUG_ON(offset >= mapping->size);  	phys_addr = mapping->base + offset; -	return iomap_atomic_prot_pfn(PHYS_PFN(phys_addr), mapping->prot); +	preempt_disable(); +	pagefault_disable(); +	return __iomap_local_pfn_prot(PHYS_PFN(phys_addr), mapping->prot);  }  static inline void  io_mapping_unmap_atomic(void __iomem *vaddr)  { -	iounmap_atomic(vaddr); +	kunmap_local_indexed((void __force *)vaddr); +	pagefault_enable(); +	preempt_enable(); +} + +static inline void __iomem * +io_mapping_map_local_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); +} + +static inline void io_mapping_unmap_local(void __iomem *vaddr) +{ +	kunmap_local_indexed((void __force *)vaddr);  }  static inline void __iomem * @@ -97,7 +116,7 @@ io_mapping_unmap(void __iomem *vaddr)  	iounmap(vaddr);  } -#else +#else  /* HAVE_ATOMIC_IOMAP */  #include <linux/uaccess.h> @@ -162,7 +181,18 @@ io_mapping_unmap_atomic(void __iomem *vaddr)  	preempt_enable();  } -#endif /* HAVE_ATOMIC_IOMAP */ +static inline void __iomem * +io_mapping_map_local_wc(struct io_mapping *mapping, unsigned long offset) +{ +	return io_mapping_map_wc(mapping, offset, PAGE_SIZE); +} + +static inline void io_mapping_unmap_local(void __iomem *vaddr) +{ +	io_mapping_unmap(vaddr); +} + +#endif /* !HAVE_ATOMIC_IOMAP */  static inline struct io_mapping *  io_mapping_create_wc(resource_size_t base,  | 
