vmalloc size

Dave Hylands dhylands at gmail.com
Tue Jun 26 01:37:24 EDT 2012


Hi,

On Mon, Jun 25, 2012 at 9:01 PM, 卜弋天 <buyit at live.cn> wrote:
>
>> Suppose your machine has 1 GB of RAM with a physical addresses of
>> 0x40000000 thru 0x7FFFFFFF
>>
>> Let's suppose that PHYS_OFFSET = 0xC0000000
>> Let's suppose that VMALLOC_START is set to 0xE0000000 and VMALLOC_END
>> is at 0xEFFFFFFF (256 Mb)
>>
> is this PAGE_OFFSET or PHYS_OFFSET?

PAGE_OFFSET is a virtual address, and PHYS_OFFSET is a physical
address, so you are correct. That should have been PAGE_OFFSET.

>> So what we have is that memory from 0xC0000000 thru 0xDFFFFFFF (512
>> Mb) is kernel direct mapped memory and maps to physical addresses
>> 0x40000000 thru 0x5FFFFFFF
>>
>> Physical memory from 0x60000000 thru 0x7FFFFFFF (512Mb) is considered
>> high-mem. For the most part this is only usable by user-space. From
>> kernel space, you need to use the kmap/kunmap functions to even access
>> the memory.
>>
> i don't think high-memory is only used by user-space.
> vmalloc() funciton will try to allocate physical memory from high_memory
> first, if there is no high_memory, then allocate from normal region.

That also seems to be correct. The code in vmalloc that calls the
underlying page allocator passes in __GFP_HIGHMEM, so it will try to
use highmem for vmalloc'd pages.

>> However, if you call vmalloc and lets suppose that vmalloc just
>> happens to return 0xE0000000. The physical address of the first page
>> might be 0xD2345000.
>>
> suppose vmalloc() return 0xE0000000, which is the VMALLOC_START, then the
> physical memory address
> should be 0x60000000 thru 0x7FFFFFFF in your example.
>
>
>> What's important is that the physical pages which back up the vmalloc
>> area all come from the kernel direct mapped area. They won't ever be
>> backed by pages from high-memory. So the physical addresses will all
>> be in the range 0x40000000 thru 0x5FFFFFFF.
>>
> what do you mean "back up", maybe i have some misunderstanding.
> in my opnion, vmalloc area should map to physical address 0x60000000 thru
> 0x7FFFFFFF first,
> if this resion is exhausted, then normal area will be allocated.

By backed-by, I meant the associated physical page. I was incorrect in
saying that only lowmem pages would be used.

-- 
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com



More information about the Kernelnewbies mailing list