|
@@ -994,6 +994,29 @@ unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address,
|
|
|
return end;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * zap_vma_ptes - remove ptes mapping the vma
|
|
|
+ * @vma: vm_area_struct holding ptes to be zapped
|
|
|
+ * @address: starting address of pages to zap
|
|
|
+ * @size: number of bytes to zap
|
|
|
+ *
|
|
|
+ * This function only unmaps ptes assigned to VM_PFNMAP vmas.
|
|
|
+ *
|
|
|
+ * The entire address range must be fully contained within the vma.
|
|
|
+ *
|
|
|
+ * Returns 0 if successful.
|
|
|
+ */
|
|
|
+int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
|
|
|
+ unsigned long size)
|
|
|
+{
|
|
|
+ if (address < vma->vm_start || address + size > vma->vm_end ||
|
|
|
+ !(vma->vm_flags & VM_PFNMAP))
|
|
|
+ return -1;
|
|
|
+ zap_page_range(vma, address, size, NULL);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(zap_vma_ptes);
|
|
|
+
|
|
|
/*
|
|
|
* Do a quick page-table lookup for a single page.
|
|
|
*/
|