explanation of __va() and __pa() macros.

AFT aftnix at gmail.com
Fri Jun 22 10:38:57 EDT 2012


Vlad Dogaru <ddvlad at rosedu.org> writes:

> On Fri, Jun 22, 2012 at 2:49 PM, AFT <aftnix at gmail.com> wrote:
>>
>> Hi,
>>
>> My source is from 2.6 git tree. In LDD3 its said that a logical address
>> is mapped to physical address and vice versa by the macros __va() and
>> __pa().
>>
>> In my source tree they are defined as follows:
>>
>> <include/asm-generic/page.h>
>>
>> #define __va(x) ((void *)((unsigned long) (x)))
>> #define __pa(x) ((unsigned long) (x))
>>
>>
>> I'm not actually understanding how these "cute" looking casting is
>> performing "address mapping". I thought address mapping involves more
>> complex operations.
>
> See the comments at the beginning of the file you quoted:
>
> /*
>  * Generic page.h implementation, for NOMMU architectures.
>  * This provides the dummy definitions for the memory management.
>  */
>
> For arch-specific code try looking, for instance, at
> arch/x86/include/asm/page.h .
>
> Hope this helps,
> Vlad
Hi Vlad,

Thanks for the explanation. I should lookout for embedded comments with
more attention from now.

cheers.
aft



More information about the Kernelnewbies mailing list