having problems with remap_page_range() and virt_to_phys()

From: Chris Friesen
Date: Thu Sep 09 2004 - 19:13:11 EST


I'm trying to allocate a page of in-kernel memory and make it accessable to userspace and to late asm code where we don't have virtual memory enabled.

I'm running code essentially equivalent to the following, where "map_addr" is a virtual address passed in by userspace, and "vma" is the appropriate one for that address:


struct page *pg = alloc_page(GFP_KERNEL);
void *virt = page_address(pg);
unsigned long phys = virt_to_phys(virt)
remap_page_range(vma, map_addr, phys, PAGE_SIZE, vma->vm_page_prot)


The problem that I'm having is that after the call to remap_page_range, the result of

virt_to_phys(map_addr)

is not equal to "phys", and I assume it should be since its supposed to be pointing to the same physical page as "virt".

Anyone have any ideas? I can't post the exact code right now since the machine is at work and hung (Oops.) but I could post it tomorrow if that is necessary.

I'm using 2.6.5 for ppc, if it makes any difference.

Thanks,

Chris
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/