diff options
Diffstat (limited to 'mm')
| -rw-r--r-- | mm/nommu.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/mm/nommu.c b/mm/nommu.c index bf0cc762a7d2..53cab10fece4 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
| @@ -238,6 +238,27 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | |||
| 238 | } | 238 | } |
| 239 | EXPORT_SYMBOL(get_user_pages); | 239 | EXPORT_SYMBOL(get_user_pages); |
| 240 | 240 | ||
| 241 | /** | ||
| 242 | * follow_pfn - look up PFN at a user virtual address | ||
| 243 | * @vma: memory mapping | ||
| 244 | * @address: user virtual address | ||
| 245 | * @pfn: location to store found PFN | ||
| 246 | * | ||
| 247 | * Only IO mappings and raw PFN mappings are allowed. | ||
| 248 | * | ||
| 249 | * Returns zero and the pfn at @pfn on success, -ve otherwise. | ||
| 250 | */ | ||
| 251 | int follow_pfn(struct vm_area_struct *vma, unsigned long address, | ||
| 252 | unsigned long *pfn) | ||
| 253 | { | ||
| 254 | if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) | ||
| 255 | return -EINVAL; | ||
| 256 | |||
| 257 | *pfn = address >> PAGE_SHIFT; | ||
| 258 | return 0; | ||
| 259 | } | ||
| 260 | EXPORT_SYMBOL(follow_pfn); | ||
| 261 | |||
| 241 | DEFINE_RWLOCK(vmlist_lock); | 262 | DEFINE_RWLOCK(vmlist_lock); |
| 242 | struct vm_struct *vmlist; | 263 | struct vm_struct *vmlist; |
| 243 | 264 | ||
