Messages in this thread | | | Date | Thu, 06 Jul 2006 19:58:12 +0200 | From | Lukas Jelinek <> | Subject | Re: __pa() versus virt_to_phys() |
| |
> Could anybody tell me the difference between these two symbols ? > > I know that one is a macro and the other one is an inline function, > so the latter performs type checkings but I don't see anything else. > > thanks > > Francis >
Here is the answer (by Dave Hansen, 2004):
__pa() is simply supposed to be the addr-PAGE_OFFSET calculation. virt_to_phys() will be guaranteed to take care of any layout changes if kernel addresses ever fail to be mapped flat, and 1:1 with the physical address layout.
So, let's say that someone is working on ... say ... memory hotplug. They will be modifying the virt_to_phys() function to make up for any weird mappings that are going on. But, they'll leave __{v,p}a alone, because those are used for stuff that occurs very early, even at compile time.
More virt_to_phys() and less __pa() will save me lots of auditing later on :) If you're not in early boot, or really know what you're doing, use virt_to_phys() and cousins.
Plus, it's more type safe.
Lukas Jelinek - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |