2013-03-18 11:12:20

by Lin Feng

[permalink] [raw]
Subject: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

For x86 PUD_SHIFT is 30 and PMD_SHIFT is 21, so the consequence of
(PUD_SHIFT-PMD_SHIFT)/2 is 4. Update the comments to the code.

Cc: Yinghai Lu <[email protected]>
Signed-off-by: Lin Feng <[email protected]>
---
arch/x86/mm/init.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 59b7fc4..637a95b 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -389,7 +389,7 @@ static unsigned long __init init_range_memory_mapping(
return mapped_ram_size;
}

-/* (PUD_SHIFT-PMD_SHIFT)/2 */
+/* (PUD_SHIFT-PMD_SHIFT)/2+1 */
#define STEP_SIZE_SHIFT 5
void __init init_mem_mapping(void)
{
--
1.8.0.1


2013-03-18 18:53:59

by Yinghai Lu

[permalink] [raw]
Subject: Re: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

On Mon, Mar 18, 2013 at 3:21 AM, Lin Feng <[email protected]> wrote:
> For x86 PUD_SHIFT is 30 and PMD_SHIFT is 21, so the consequence of
> (PUD_SHIFT-PMD_SHIFT)/2 is 4. Update the comments to the code.
>
> Cc: Yinghai Lu <[email protected]>
> Signed-off-by: Lin Feng <[email protected]>
> ---
> arch/x86/mm/init.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 59b7fc4..637a95b 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -389,7 +389,7 @@ static unsigned long __init init_range_memory_mapping(
> return mapped_ram_size;
> }
>
> -/* (PUD_SHIFT-PMD_SHIFT)/2 */
> +/* (PUD_SHIFT-PMD_SHIFT)/2+1 */
> #define STEP_SIZE_SHIFT 5
> void __init init_mem_mapping(void)
> {

9/2=4.5, so it becomes 5.

2013-03-18 19:01:44

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

On 03/18/2013 11:53 AM, Yinghai Lu wrote:
> On Mon, Mar 18, 2013 at 3:21 AM, Lin Feng <[email protected]> wrote:
>> For x86 PUD_SHIFT is 30 and PMD_SHIFT is 21, so the consequence of
>> (PUD_SHIFT-PMD_SHIFT)/2 is 4. Update the comments to the code.
>>
>> Cc: Yinghai Lu <[email protected]>
>> Signed-off-by: Lin Feng <[email protected]>
>> ---
>> arch/x86/mm/init.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
>> index 59b7fc4..637a95b 100644
>> --- a/arch/x86/mm/init.c
>> +++ b/arch/x86/mm/init.c
>> @@ -389,7 +389,7 @@ static unsigned long __init init_range_memory_mapping(
>> return mapped_ram_size;
>> }
>>
>> -/* (PUD_SHIFT-PMD_SHIFT)/2 */
>> +/* (PUD_SHIFT-PMD_SHIFT)/2+1 */
>> #define STEP_SIZE_SHIFT 5
>> void __init init_mem_mapping(void)
>> {
>
> 9/2=4.5, so it becomes 5.
>

No, it doesn't. This is C, not elementary school Now I'm really bothered.

The comment doesn't say *why* (PUD_SHIFT-PMD_SHIFT)/2 or any other
variant is correct, furthermore I suspect that the +1 is misplaced.
However, what is really needed is:

1. Someone needs to explain what the logic should be and why, and
2. replace the macro with a symbolic macro, not with a constant and a
comment explaining, incorrectly, how that value was derived.

-hpa

2013-03-18 19:13:09

by Yinghai Lu

[permalink] [raw]
Subject: Re: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

On Mon, Mar 18, 2013 at 11:59 AM, H. Peter Anvin <[email protected]> wrote:
> On 03/18/2013 11:53 AM, Yinghai Lu wrote:
>> On Mon, Mar 18, 2013 at 3:21 AM, Lin Feng <[email protected]> wrote:
>>> For x86 PUD_SHIFT is 30 and PMD_SHIFT is 21, so the consequence of
>>> (PUD_SHIFT-PMD_SHIFT)/2 is 4. Update the comments to the code.
>>>
>>> Cc: Yinghai Lu <[email protected]>
>>> Signed-off-by: Lin Feng <[email protected]>
>>> ---
>>> arch/x86/mm/init.c | 2 +-
>>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
>>> index 59b7fc4..637a95b 100644
>>> --- a/arch/x86/mm/init.c
>>> +++ b/arch/x86/mm/init.c
>>> @@ -389,7 +389,7 @@ static unsigned long __init init_range_memory_mapping(
>>> return mapped_ram_size;
>>> }
>>>
>>> -/* (PUD_SHIFT-PMD_SHIFT)/2 */
>>> +/* (PUD_SHIFT-PMD_SHIFT)/2+1 */
>>> #define STEP_SIZE_SHIFT 5
>>> void __init init_mem_mapping(void)
>>> {
>>
>> 9/2=4.5, so it becomes 5.
>>
>
> No, it doesn't. This is C, not elementary school Now I'm really bothered.
>
> The comment doesn't say *why* (PUD_SHIFT-PMD_SHIFT)/2 or any other
> variant is correct, furthermore I suspect that the +1 is misplaced.
> However, what is really needed is:
>
> 1. Someone needs to explain what the logic should be and why, and
> 2. replace the macro with a symbolic macro, not with a constant and a
> comment explaining, incorrectly, how that value was derived.

yes, we should find out free_mem_size instead to decide next step size.

But that will come out page table size estimation problem again.

Yinghai

2013-03-18 19:17:13

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

On 03/18/2013 12:13 PM, Yinghai Lu wrote:
>>
>> No, it doesn't. This is C, not elementary school Now I'm really bothered.
>>
>> The comment doesn't say *why* (PUD_SHIFT-PMD_SHIFT)/2 or any other
>> variant is correct, furthermore I suspect that the +1 is misplaced.
>> However, what is really needed is:
>>
>> 1. Someone needs to explain what the logic should be and why, and
>> 2. replace the macro with a symbolic macro, not with a constant and a
>> comment explaining, incorrectly, how that value was derived.
>
> yes, we should find out free_mem_size instead to decide next step size.
>
> But that will come out page table size estimation problem again.
>

Sorry, that comment is double nonsense for someone who isn't intimately
familiar with the code, and it sounds like it is just plain wrong.

Instead, try to explain why 5 is the correct value in the current code
and how it is (or should be!) derived.

-hpa


2013-03-18 21:20:02

by Yinghai Lu

[permalink] [raw]
Subject: Re: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

On Mon, Mar 18, 2013 at 12:14 PM, H. Peter Anvin <[email protected]> wrote:

> Instead, try to explain why 5 is the correct value in the current code
> and how it is (or should be!) derived.

initial mapped size is PMD_SIZE, aka 2M.
if we use step_size to be PUD_SIZE aka 1G, as most worse case
that 1G is cross the 1G boundary, and PG_LEVEL_2M is not set,
we will need 1+1+512 pages (aka 2M + 8k) to map 1G range with PTE.
So i picked (30-21)/2 to get 5.

Please check attached patch.

Thanks

Yinghai


Attachments:
add_comment_for_step_size.patch (1.51 kB)

2013-03-18 22:53:10

by H. Peter Anvin

[permalink] [raw]
Subject: Re: [PATCH] x86: mm: accurate the comments for STEP_SIZE_SHIFT macro

On 03/18/2013 02:19 PM, Yinghai Lu wrote:
> On Mon, Mar 18, 2013 at 12:14 PM, H. Peter Anvin <[email protected]> wrote:
>
>> Instead, try to explain why 5 is the correct value in the current code
>> and how it is (or should be!) derived.
>
> initial mapped size is PMD_SIZE, aka 2M.
> if we use step_size to be PUD_SIZE aka 1G, as most worse case
> that 1G is cross the 1G boundary, and PG_LEVEL_2M is not set,
> we will need 1+1+512 pages (aka 2M + 8k) to map 1G range with PTE.
> So i picked (30-21)/2 to get 5.
>
> Please check attached patch.
>
> Thanks
>
> Yinghai
>

This still seems very opaque. I need to look at it and see if it makes
more sense in context.

-hpa