From: Simon Jeons <simon.jeons@gmail.com>
To: Jiang Liu <liuj97@gmail.com>
Cc: Jiang Liu <jiang.liu@huawei.com>,
"linux-mm@kvack.org >> Linux Memory Management List"
<linux-mm@kvack.org>
Subject: Re: mm: introduce new field "managed_pages" to struct zone
Date: Fri, 08 Mar 2013 10:14:23 +0800 [thread overview]
Message-ID: <5139497F.8010505@gmail.com> (raw)
In-Reply-To: <51368C01.2090608@gmail.com>
Ping, :-)
On 03/06/2013 08:21 AM, Simon Jeons wrote:
> On 03/05/2013 11:08 PM, Jiang Liu wrote:
>> On 03/05/2013 08:19 PM, Simon Jeons wrote:
>>> On 03/05/2013 12:37 AM, Jiang Liu wrote:
>>>> On 03/04/2013 07:57 AM, Simon Jeons wrote:
>>>>> Hi Jiang,
>>>>> On 03/03/2013 11:43 PM, Jiang Liu wrote:
>>>>>> Hi Simon,
>>>>>> Bootmem allocator is used to managed DMA and Normal memory
>>>>>> only, and it does not manage highmem pages because kernel
>>>>>> can't directly access highmem pages.
>>>>> Why you say so? Could you point out where you figure out bootmem
>>>>> allocator doesn't handle highmem pages? In my understanding, it
>>>>> doesn't distinguish low memory or high memory.
>>>> Hi Simon,
>>> Hi Jiang,
>>>
>>> The comments of max_pfn_mapped is "highest direct mapped pfn over
>>> 4GB", so if both bootmem allocator and memblock just manage direct
>>> mapping pages?
>>> BTW, could you show me where you can figure out traditional bootmem
>>> allocator manages directly mapping pages?
>> Hi Simon,
>> Bootmem allocator only manages directly mapped pages, but
>> memblock could manage all pages.
>> For traditional bootmem allocator, you could trace back callers of
>> init_bootmem_node() and init_bootmem()
>> to get the idea.
>
> Hi Jiang,
>
> I track the callset of init_bootmem() against openrisc
> architecture(arch/openrisc/kernel/setup.c), it seems that it manages
> all the memory instead of low memory you mentioned. BTW, I didn't read
> x86_64 direct mapping codes before, if has enough big memory, what's
> the range of direct mapping?
>
>> Regards!
>> Gerry
>>
>>>> According to my understanding, bootmem allocator does only
>>>> manages lowmem pages.
>>>> For traditional bootmem allocator in mm/bootmem.c, it could only
>>>> manages directly mapped lowmem pages.
>>>> For new bootmem allocator in mm/nobootmem.c, it depends on memblock
>>>> to do the real work. Let's take
>>>> x86 as an example:
>>>> 1) following code set memblock.current_limit to max_low_pfn.
>>>> arch/x86/kernel/setup.c: memblock.current_limit = get_max_mapped();
>>>> 2) the core of bootmem allocator in nobootmem.c is function
>>>> __alloc_memory_core_early(),
>>>> which has following code to avoid allocate highmem pages:
>>>> static void * __init __alloc_memory_core_early(int nid, u64 size,
>>>> u64 align,
>>>> u64 goal, u64 limit)
>>>> {
>>>> void *ptr;
>>>> u64 addr;
>>>>
>>>> if (limit > memblock.current_limit)
>>>> limit = memblock.current_limit;
>>>>
>>>> addr = memblock_find_in_range_node(goal, limit, size,
>>>> align, nid);
>>>> if (!addr)
>>>> return NULL;
>>>> }
>>>>
>>>> I guess it's the same for other architectures. On the other hand,
>>>> some other architectures
>>>> may allocate highmem pages during boot by directly using memblock
>>>> interfaces. For example,
>>>> ppc use memblock interfaces to allocate highmem pages for giagant
>>>> hugetlb pages.
>>>>
>>>> I'm working a patch set to fix those cases.
>>>>
>>>> Regards!
>>>> Gerry
>>>>
>>>>
>>>>>> Regards!
>>>>>> Gerry
>>>>>>
>>>>>> On 02/28/2013 02:13 PM, Simon Jeons wrote:
>>>>>>> Hi Jiang,
>>>>>>>
>>>>>>> https://patchwork.kernel.org/patch/1781291/
>>>>>>>
>>>>>>> You said that the bootmem allocator doesn't touch *highmem
>>>>>>> pages*, so highmem zones' managed_pages is set to the accurate
>>>>>>> value "spanned_pages - absent_pages" in function
>>>>>>> free_area_init_core() and won't be updated anymore. Why it
>>>>>>> doesn't touch *highmem pages*? Could you point out where you
>>>>>>> figure out this?
>>>>>>>
>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2013-03-08 2:14 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-28 6:13 mm: introduce new field "managed_pages" to struct zone Simon Jeons
2013-03-03 5:01 ` Ric Mason
2013-03-03 17:13 ` Jiang Liu
2013-03-03 15:43 ` Jiang Liu
2013-03-03 23:57 ` Simon Jeons
2013-03-04 16:37 ` Jiang Liu
2013-03-05 12:19 ` Simon Jeons
2013-03-05 15:08 ` Jiang Liu
2013-03-06 0:21 ` Simon Jeons
2013-03-08 2:14 ` Simon Jeons [this message]
2013-03-08 3:11 ` Jiang Liu
2013-03-05 12:21 ` Simon Jeons
2013-03-05 15:03 ` Jiang Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5139497F.8010505@gmail.com \
--to=simon.jeons@gmail.com \
--cc=jiang.liu@huawei.com \
--cc=linux-mm@kvack.org \
--cc=liuj97@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.