|
@@ -1602,30 +1602,6 @@ static int vm_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * vm_insert_pfn - insert single pfn into user vma
|
|
|
- * @vma: user vma to map to
|
|
|
- * @addr: target user address of this page
|
|
|
- * @pfn: source kernel pfn
|
|
|
- *
|
|
|
- * Similar to vm_insert_page, this allows drivers to insert individual pages
|
|
|
- * they've allocated into a user vma. Same comments apply.
|
|
|
- *
|
|
|
- * This function should only be called from a vm_ops->fault handler, and
|
|
|
- * in that case the handler should return NULL.
|
|
|
- *
|
|
|
- * vma cannot be a COW mapping.
|
|
|
- *
|
|
|
- * As this is called only for pages that do not currently exist, we
|
|
|
- * do not need to flush old virtual caches or the TLB.
|
|
|
- */
|
|
|
-int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
|
|
|
- unsigned long pfn)
|
|
|
-{
|
|
|
- return vm_insert_pfn_prot(vma, addr, pfn, vma->vm_page_prot);
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(vm_insert_pfn);
|
|
|
-
|
|
|
/**
|
|
|
* vmf_insert_pfn_prot - insert single pfn into user vma with specified pgprot
|
|
|
* @vma: user vma to map to
|
|
@@ -1638,9 +1614,10 @@ EXPORT_SYMBOL(vm_insert_pfn);
|
|
|
*
|
|
|
* This only makes sense for IO mappings, and it makes no sense for
|
|
|
* COW mappings. In general, using multiple vmas is preferable;
|
|
|
- * vm_insert_pfn_prot should only be used if using multiple VMAs is
|
|
|
+ * vmf_insert_pfn_prot should only be used if using multiple VMAs is
|
|
|
* impractical.
|
|
|
*
|
|
|
+ * Context: Process context. May allocate using %GFP_KERNEL.
|
|
|
* Return: vm_fault_t value.
|
|
|
*/
|
|
|
vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
|
|
@@ -1657,6 +1634,33 @@ vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
|
|
|
}
|
|
|
EXPORT_SYMBOL(vmf_insert_pfn_prot);
|
|
|
|
|
|
+/**
|
|
|
+ * vmf_insert_pfn - insert single pfn into user vma
|
|
|
+ * @vma: user vma to map to
|
|
|
+ * @addr: target user address of this page
|
|
|
+ * @pfn: source kernel pfn
|
|
|
+ *
|
|
|
+ * Similar to vm_insert_page, this allows drivers to insert individual pages
|
|
|
+ * they've allocated into a user vma. Same comments apply.
|
|
|
+ *
|
|
|
+ * This function should only be called from a vm_ops->fault handler, and
|
|
|
+ * in that case the handler should return the result of this function.
|
|
|
+ *
|
|
|
+ * vma cannot be a COW mapping.
|
|
|
+ *
|
|
|
+ * As this is called only for pages that do not currently exist, we
|
|
|
+ * do not need to flush old virtual caches or the TLB.
|
|
|
+ *
|
|
|
+ * Context: Process context. May allocate using %GFP_KERNEL.
|
|
|
+ * Return: vm_fault_t value.
|
|
|
+ */
|
|
|
+vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
|
|
|
+ unsigned long pfn)
|
|
|
+{
|
|
|
+ return vmf_insert_pfn_prot(vma, addr, pfn, vma->vm_page_prot);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(vmf_insert_pfn);
|
|
|
+
|
|
|
static bool vm_mixed_ok(struct vm_area_struct *vma, pfn_t pfn)
|
|
|
{
|
|
|
/* these checks mirror the abort conditions in vm_normal_page */
|