vmalloc_to_pfn returns 32 bit address on Linux 32 system. Why does it chop off higher bits of PAE physical address?
问题 I'm using vmalloc_to_pfn() to get the physical address on a 32-bit PAE Linux system. It looks like vmalloc_to_pfn() returns "unsigned long" which means it is 32 bit on a 32 bit system, 64 bit on a 64-bit system. On 64-bit Linux, unsigned long is 64 bit and I've no issues. Problem: Using this function to convert virtual to physical: VA: 0xf8ab87fc PA using vmalloc_to_pfn: 0x36f7f7fc . But I'm actually expecting: 0x136f7f7fc . The physical address falls between 4 to 5 GB. But I can't get the