0001
0002
0003 #include <linux/mm.h>
0004 #include <linux/io-mapping.h>
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 int io_mapping_map_user(struct io_mapping *iomap, struct vm_area_struct *vma,
0017 unsigned long addr, unsigned long pfn, unsigned long size)
0018 {
0019 vm_flags_t expected_flags = VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
0020
0021 if (WARN_ON_ONCE((vma->vm_flags & expected_flags) != expected_flags))
0022 return -EINVAL;
0023
0024
0025 return remap_pfn_range_notrack(vma, addr, pfn, size,
0026 __pgprot((pgprot_val(iomap->prot) & _PAGE_CACHE_MASK) |
0027 (pgprot_val(vma->vm_page_prot) & ~_PAGE_CACHE_MASK)));
0028 }
0029 EXPORT_SYMBOL_GPL(io_mapping_map_user);