Commit 7fc7e2ee authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Remove (at least temporarily) the "incomplete PFN mapping" support



With the previous commit, we can handle arbitrary shared re-mappings
even without this complexity, and since the only known private mappings
are for strange users of /dev/mem (which never create an incomplete one),
there seems to be no reason to support it.

Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent fb155c16
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -163,7 +163,6 @@ extern unsigned int kobjsize(const void *objp);
#define VM_HUGETLB	0x00400000	/* Huge TLB Page VM */
#define VM_NONLINEAR	0x00800000	/* Is non-linear (remap_file_pages) */
#define VM_MAPPED_COPY	0x01000000	/* T if mapped copy of data (nommu mmap) */
#define VM_INCOMPLETE	0x02000000	/* Strange partial PFN mapping marker */

#ifndef VM_STACK_DEFAULT_FLAGS		/* arch can override this */
#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
+1 −45
Original line number Diff line number Diff line
@@ -1227,50 +1227,6 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr, struct page *
}
EXPORT_SYMBOL(vm_insert_page);

/*
 * Somebody does a pfn remapping that doesn't actually work as a vma.
 *
 * Do it as individual pages instead, and warn about it. It's bad form,
 * and very inefficient.
 */
static int incomplete_pfn_remap(struct vm_area_struct *vma,
		unsigned long start, unsigned long end,
		unsigned long pfn, pgprot_t prot)
{
	static int warn = 10;
	struct page *page;
	int retval;

	if (!(vma->vm_flags & VM_INCOMPLETE)) {
		if (warn) {
			warn--;
			printk("%s does an incomplete pfn remapping", current->comm);
			dump_stack();
		}
	}
	vma->vm_flags |= VM_INCOMPLETE | VM_IO | VM_RESERVED;

	if (start < vma->vm_start || end > vma->vm_end)
		return -EINVAL;

	if (!pfn_valid(pfn))
		return -EINVAL;

	page = pfn_to_page(pfn);
	if (!PageReserved(page))
		return -EINVAL;

	retval = 0;
	while (start < end) {
		retval = insert_page(vma->vm_mm, start, page, prot);
		if (retval < 0)
			break;
		start += PAGE_SIZE;
		page++;
	}
	return retval;
}

/*
 * maps a range of physical memory into the requested pages. the old
 * mappings are removed. any references to nonexistent pages results
@@ -1365,7 +1321,7 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
	 */
	if (!(vma->vm_flags & VM_SHARED)) {
		if (addr != vma->vm_start || end != vma->vm_end)
			return incomplete_pfn_remap(vma, addr, end, pfn, prot);
			return -EINVAL;
		vma->vm_pgoff = pfn;
	}