/* Returns zero and the pfn at @pfn on success, -ve otherwise.  */
int follow_pfn(struct vm_area_struct *vma, unsigned long address, unsigned long *pfn)
/* Returns zero and the pfn at @pfn on success, -ve otherwise.  */
int follow_pfn(struct vm_area_struct *vma, unsigned long address, unsigned long *pfn)
{
	if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
		return -EINVAL;
	*pfn = address >> PAGE_SHIFT;
	return 0;
}