Re: Will __pa(vmalloc()) ever work?

From: Gerd Knorr
Date: Tue May 31 2005 - 11:37:10 EST


On Tue, May 31, 2005 at 10:51:27AM -0500, Timur Tabi wrote:
> Gerd Knorr wrote:
>
> >You should use vmalloc_to_page() (this does the page-table walking
> >with correct locking), then the usual dma mapping interface
> >(pci_map_page() or pci_map_sg()) to get bus address(es) you can pass
> >to your device for DMA.
>
> My problem is that I don't know where the memory came from.

Can you fix that? If so, try that. Would be the best.

> It could have been allocated via kmalloc, or vmalloc, or
> anywhere else. Can I call vmalloc_to_page() on memory
> allocated via kmalloc()?

I think you can't. What is "anywhere else"? Does that include
userspace addresses?

> If the answer is no, then how can I tell whether the memory
> was allocated via vmalloc() or some other method?

Not sure how portable that is, but comparing the vaddr against
the vmalloc address space could work. There are macros for
that, VMALLOC_START & VMALLOC_END IIRC.

> I need a reliable virtual-to-physical (or virtual-to-bus,
> which is the same thing on x86 architectures)

Well, on !x86 architectures it isn't ...

Gerd

--
-mm seems unusually stable at present.
-- akpm about 2.6.12-rc3-mm3
-
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/