* [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
@ 2011-11-16 19:43 David Daney
2011-11-16 21:32 ` David Rientjes
0 siblings, 1 reply; 9+ messages in thread
From: David Daney @ 2011-11-16 19:43 UTC (permalink / raw)
To: linux-mips, ralf, William Irwin, Andrew Morton, linux-kernel; +Cc: David Daney
From: David Daney <david.daney@cavium.com>
This is required now to get MIPS kernels to compile with
!CONFIG_HUGETLB_PAGE.
Signed-off-by: David Daney <david.daney@cavium.com>
---
include/linux/hugetlb.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index 19644e0..746d543 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -113,6 +113,7 @@ static inline void copy_huge_page(struct page *dst, struct page *src)
#ifndef HPAGE_MASK
#define HPAGE_MASK PAGE_MASK /* Keep the compiler happy */
#define HPAGE_SIZE PAGE_SIZE
+#define HPAGE_SHIFT PAGE_SHIFT
#endif
#endif /* !CONFIG_HUGETLB_PAGE */
--
1.7.2.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-16 19:43 [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE David Daney
@ 2011-11-16 21:32 ` David Rientjes
2011-11-16 22:09 ` David Daney
0 siblings, 1 reply; 9+ messages in thread
From: David Rientjes @ 2011-11-16 21:32 UTC (permalink / raw)
To: David Daney
Cc: linux-mips, ralf, William Irwin, Andrew Morton, linux-kernel,
David Daney
On Wed, 16 Nov 2011, David Daney wrote:
> From: David Daney <david.daney@cavium.com>
>
> This is required now to get MIPS kernels to compile with
> !CONFIG_HUGETLB_PAGE.
>
Why? Apparently there's some config option you've enabled that is causing
it to fail but I can't find it. defconfig works fine on my mips
crosscompiler and allyesconfig is borked already in other ways.
This is definitely the wrong fix, anyway, and it would require a change to
arch/mips/include/asm/page.h instead since it's localized to mips, so
nack.
> Signed-off-by: David Daney <david.daney@cavium.com>
> ---
> include/linux/hugetlb.h | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> index 19644e0..746d543 100644
> --- a/include/linux/hugetlb.h
> +++ b/include/linux/hugetlb.h
> @@ -113,6 +113,7 @@ static inline void copy_huge_page(struct page *dst, struct page *src)
> #ifndef HPAGE_MASK
> #define HPAGE_MASK PAGE_MASK /* Keep the compiler happy */
> #define HPAGE_SIZE PAGE_SIZE
> +#define HPAGE_SHIFT PAGE_SHIFT
> #endif
>
> #endif /* !CONFIG_HUGETLB_PAGE */
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-16 21:32 ` David Rientjes
@ 2011-11-16 22:09 ` David Daney
2011-11-16 23:18 ` David Rientjes
0 siblings, 1 reply; 9+ messages in thread
From: David Daney @ 2011-11-16 22:09 UTC (permalink / raw)
To: David Rientjes, ralf@linux-mips.org
Cc: David Daney, linux-mips@linux-mips.org, William Irwin,
Andrew Morton, linux-kernel@vger.kernel.org, David Daney
On 11/16/2011 01:32 PM, David Rientjes wrote:
> On Wed, 16 Nov 2011, David Daney wrote:
>
>> From: David Daney<david.daney@cavium.com>
>>
>> This is required now to get MIPS kernels to compile with
>> !CONFIG_HUGETLB_PAGE.
>>
>
> Why?
I should have been more specific. The failure is in Ralf's
mips-for-linux-next branch.
> Apparently there's some config option you've enabled that is causing
> it to fail but I can't find it. defconfig works fine on my mips
> crosscompiler and allyesconfig is borked already in other ways.
Please look in the mips-for-linux-next branch.
>
> This is definitely the wrong fix, anyway, and it would require a change to
> arch/mips/include/asm/page.h instead since it's localized to mips,
No, all we are doing is supplying a dummy definition for HPAGE_SHIFT as
we currently have for HPAGE_SIZE and HPAGE_MASK.
> so nack.
>
>> Signed-off-by: David Daney<david.daney@cavium.com>
>> ---
>> include/linux/hugetlb.h | 1 +
>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
>> index 19644e0..746d543 100644
>> --- a/include/linux/hugetlb.h
>> +++ b/include/linux/hugetlb.h
>> @@ -113,6 +113,7 @@ static inline void copy_huge_page(struct page *dst, struct page *src)
>> #ifndef HPAGE_MASK
>> #define HPAGE_MASK PAGE_MASK /* Keep the compiler happy */
>> #define HPAGE_SIZE PAGE_SIZE
Why didn't you NACK the addition of these two lines too?
Following your logic, we should remove these and patch up all the
architecture specific files instead.
David Daney
>> +#define HPAGE_SHIFT PAGE_SHIFT
>> #endif
>>
>> #endif /* !CONFIG_HUGETLB_PAGE */
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-16 22:09 ` David Daney
@ 2011-11-16 23:18 ` David Rientjes
2011-11-16 23:44 ` David Daney
0 siblings, 1 reply; 9+ messages in thread
From: David Rientjes @ 2011-11-16 23:18 UTC (permalink / raw)
To: David Daney
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, William Irwin,
Andrew Morton, linux-kernel@vger.kernel.org, David Daney
On Wed, 16 Nov 2011, David Daney wrote:
> > > This is required now to get MIPS kernels to compile with
> > > !CONFIG_HUGETLB_PAGE.
> > >
> >
> > Why?
>
> I should have been more specific. The failure is in Ralf's
> mips-for-linux-next branch.
>
I can't find that branch (it's not in Ralf's tree at git.kernel.org), so
I'm looking at next-20111116. It doesn't compile for mips for other
reasons related to arch/mips/sgi-ip22/ip22-gio.c.
> > This is definitely the wrong fix, anyway, and it would require a change to
> > arch/mips/include/asm/page.h instead since it's localized to mips,
>
> No, all we are doing is supplying a dummy definition for HPAGE_SHIFT as we
> currently have for HPAGE_SIZE and HPAGE_MASK.
>
Which is wrong. MIPS code should not be using HPAGE_SHIFT without
CONFIG_HUGETLB_PAGE and in fact defines it itself for such a configuration
in arch/mips/include/asm/page.h. The only generic uses are in
page_alloc.c where we need CONFIG_HUGETLB_PAGE_SIZE_VARIABLE, which isn't
available on mips, and in mm/hugetlb.c which requires CONFIG_HUGETLB_PAGE
by way of CONFIG_HUGETLBFS.
So feel free to show the actual compile error this time and I'll suggest a
mips fix for it.
> > so nack.
> >
> > > Signed-off-by: David Daney<david.daney@cavium.com>
> > > ---
> > > include/linux/hugetlb.h | 1 +
> > > 1 files changed, 1 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> > > index 19644e0..746d543 100644
> > > --- a/include/linux/hugetlb.h
> > > +++ b/include/linux/hugetlb.h
> > > @@ -113,6 +113,7 @@ static inline void copy_huge_page(struct page *dst,
> > > struct page *src)
> > > #ifndef HPAGE_MASK
> > > #define HPAGE_MASK PAGE_MASK /* Keep the compiler
> > > happy */
> > > #define HPAGE_SIZE PAGE_SIZE
>
> Why didn't you NACK the addition of these two lines too?
>
> Following your logic, we should remove these and patch up all the architecture
> specific files instead.
>
I think it's a worthwhile goal to remove these as well, yes.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-16 23:18 ` David Rientjes
@ 2011-11-16 23:44 ` David Daney
2011-11-17 0:08 ` David Rientjes
0 siblings, 1 reply; 9+ messages in thread
From: David Daney @ 2011-11-16 23:44 UTC (permalink / raw)
To: David Rientjes
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, Andrew Morton,
linux-kernel@vger.kernel.org, David Daney
On 11/16/2011 03:18 PM, David Rientjes wrote:
> On Wed, 16 Nov 2011, David Daney wrote:
>
>>>> This is required now to get MIPS kernels to compile with
>>>> !CONFIG_HUGETLB_PAGE.
>>>>
>>>
>>> Why?
>>
>> I should have been more specific. The failure is in Ralf's
>> mips-for-linux-next branch.
>>
>
> I can't find that branch (it's not in Ralf's tree at git.kernel.org), so
> I'm looking at next-20111116. It doesn't compile for mips for other
> reasons related to arch/mips/sgi-ip22/ip22-gio.c.
Ralf's various trees are accessible via linux-mips.org
>
>>> This is definitely the wrong fix, anyway, and it would require a change to
>>> arch/mips/include/asm/page.h instead since it's localized to mips,
>>
>> No, all we are doing is supplying a dummy definition for HPAGE_SHIFT as we
>> currently have for HPAGE_SIZE and HPAGE_MASK.
>>
>
> Which is wrong. MIPS code should not be using HPAGE_SHIFT without
> CONFIG_HUGETLB_PAGE and in fact defines it itself for such a configuration
> in arch/mips/include/asm/page.h. The only generic uses are in
> page_alloc.c where we need CONFIG_HUGETLB_PAGE_SIZE_VARIABLE, which isn't
> available on mips, and in mm/hugetlb.c which requires CONFIG_HUGETLB_PAGE
> by way of CONFIG_HUGETLBFS.
>
> So feel free to show the actual compile error this time and I'll suggest a
> mips fix for it.
arch/mips/mm/tlb-r4k.c: In function ‘local_flush_tlb_range’:
arch/mips/mm/tlb-r4k.c:129:28: error: ‘HPAGE_SHIFT’ undeclared (first
use in this function)
However, I call B.S. on your reasoning.
It is a well established kernel idiom to supply dummy values for symbols
that are required to be defined in order to form a syntactically correct
C program, but that are known by the programmer to be used only on dead
code paths.
This is exactly what we are doing here.
To do otherwise requires that code be cluttered with #ifdefery.
David Daney
>>> so nack.
>>>
>>>> Signed-off-by: David Daney<david.daney@cavium.com>
>>>> ---
>>>> include/linux/hugetlb.h | 1 +
>>>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>>>
>>>> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
>>>> index 19644e0..746d543 100644
>>>> --- a/include/linux/hugetlb.h
>>>> +++ b/include/linux/hugetlb.h
>>>> @@ -113,6 +113,7 @@ static inline void copy_huge_page(struct page *dst,
>>>> struct page *src)
>>>> #ifndef HPAGE_MASK
>>>> #define HPAGE_MASK PAGE_MASK /* Keep the compiler
>>>> happy */
>>>> #define HPAGE_SIZE PAGE_SIZE
>>
>> Why didn't you NACK the addition of these two lines too?
>>
>> Following your logic, we should remove these and patch up all the architecture
>> specific files instead.
>>
>
> I think it's a worthwhile goal to remove these as well, yes.
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-16 23:44 ` David Daney
@ 2011-11-17 0:08 ` David Rientjes
2011-11-17 1:00 ` David Daney
0 siblings, 1 reply; 9+ messages in thread
From: David Rientjes @ 2011-11-17 0:08 UTC (permalink / raw)
To: David Daney
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, Andrew Morton,
linux-kernel@vger.kernel.org, David Daney
[-- Attachment #1: Type: TEXT/PLAIN, Size: 3090 bytes --]
On Wed, 16 Nov 2011, David Daney wrote:
> > > > > This is required now to get MIPS kernels to compile with
> > > > > !CONFIG_HUGETLB_PAGE.
> > > > >
> > > >
> > > > Why?
> > >
> > > I should have been more specific. The failure is in Ralf's
> > > mips-for-linux-next branch.
> > >
> >
> > I can't find that branch (it's not in Ralf's tree at git.kernel.org), so
> > I'm looking at next-20111116. It doesn't compile for mips for other
> > reasons related to arch/mips/sgi-ip22/ip22-gio.c.
>
> Ralf's various trees are accessible via linux-mips.org
>
Wow, we've certainly gone a long way from a patch that appears to be
fixing a problem in Linus' tree based on your commit message. You're
working from ralf/upstream-sfr.git#mips-for-linux-next from
git.linux-mips.org.
Might want to have mentioned that for a patch labeled "hugetlb".
> > Which is wrong. MIPS code should not be using HPAGE_SHIFT without
> > CONFIG_HUGETLB_PAGE and in fact defines it itself for such a configuration
> > in arch/mips/include/asm/page.h. The only generic uses are in
> > page_alloc.c where we need CONFIG_HUGETLB_PAGE_SIZE_VARIABLE, which isn't
> > available on mips, and in mm/hugetlb.c which requires CONFIG_HUGETLB_PAGE
> > by way of CONFIG_HUGETLBFS.
> >
> > So feel free to show the actual compile error this time and I'll suggest a
> > mips fix for it.
>
> arch/mips/mm/tlb-r4k.c: In function ‘local_flush_tlb_range’:
> arch/mips/mm/tlb-r4k.c:129:28: error: ‘HPAGE_SHIFT’ undeclared (first use in
> this function)
>
Do you see where that file has #ifdef's for CONFIG_HUGETLB_PAGE? You need
them here too. The problem is that is_vm_hugetlb_page() is not #define to
0 for CONFIG_HUGETLB_PAGE=n so the clauses using HPAGE_* aren't compiled
out like the author is expecting.
> However, I call B.S. on your reasoning.
>
> It is a well established kernel idiom to supply dummy values for symbols that
> are required to be defined in order to form a syntactically correct C program,
> but that are known by the programmer to be used only on dead code paths.
>
> This is exactly what we are doing here.
>
> To do otherwise requires that code be cluttered with #ifdefery.
>
You're wrong, nobody should be using HPAGE_SHIFT unless they are working
with hugepages and, in fact, that code that placed those "dummy values"
for HPAGE_MASK and HPAGE_SIZE there has since been removed since 2005.
Defining HPAGE_SHIFT to be PAGE_SHIFT is just stupid and doing so may
allow the program to compile but will hide real bugs later on. In
fact if you merged your patch, it would be a bug since the vma would have
VM_HUGETLB but you'd now be operating on PAGE_SIZE pages!
Like I said, we should be removing those existing definitions of
HPAGE_MASK and HPAGE_SIZE rather than leaving them so someone like you can
come along and pretend there's any legitimacy to them whatsoever and
extend the insanity.
You may not realize it, but changes to include/linux/hugetlb.h go through
Andrew; Ralf won't be merging anything into this generic header file
because of a mips problem.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-17 0:08 ` David Rientjes
@ 2011-11-17 1:00 ` David Daney
2011-11-17 4:56 ` David Rientjes
0 siblings, 1 reply; 9+ messages in thread
From: David Daney @ 2011-11-17 1:00 UTC (permalink / raw)
To: David Rientjes
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, Andrew Morton,
linux-kernel@vger.kernel.org, David Daney
On 11/16/2011 04:08 PM, David Rientjes wrote:
> On Wed, 16 Nov 2011, David Daney wrote:
>
>>>>>> This is required now to get MIPS kernels to compile with
>>>>>> !CONFIG_HUGETLB_PAGE.
>>>>>>
>>>>>
>>>>> Why?
>>>>
>>>> I should have been more specific. The failure is in Ralf's
>>>> mips-for-linux-next branch.
>>>>
>>>
>>> I can't find that branch (it's not in Ralf's tree at git.kernel.org), so
>>> I'm looking at next-20111116. It doesn't compile for mips for other
>>> reasons related to arch/mips/sgi-ip22/ip22-gio.c.
>>
>> Ralf's various trees are accessible via linux-mips.org
>>
>
> Wow, we've certainly gone a long way from a patch that appears to be
> fixing a problem in Linus' tree based on your commit message. You're
> working from ralf/upstream-sfr.git#mips-for-linux-next from
> git.linux-mips.org.
>
Yes, as I already said, I should have been more specific about this.
> Might want to have mentioned that for a patch labeled "hugetlb".
>
>>> Which is wrong. MIPS code should not be using HPAGE_SHIFT without
>>> CONFIG_HUGETLB_PAGE and in fact defines it itself for such a configuration
>>> in arch/mips/include/asm/page.h. The only generic uses are in
>>> page_alloc.c where we need CONFIG_HUGETLB_PAGE_SIZE_VARIABLE, which isn't
>>> available on mips, and in mm/hugetlb.c which requires CONFIG_HUGETLB_PAGE
>>> by way of CONFIG_HUGETLBFS.
>>>
>>> So feel free to show the actual compile error this time and I'll suggest a
>>> mips fix for it.
>>
>> arch/mips/mm/tlb-r4k.c: In function ‘local_flush_tlb_range’:
>> arch/mips/mm/tlb-r4k.c:129:28: error: ‘HPAGE_SHIFT’ undeclared (first use in
>> this function)
>>
>
> Do you see where that file has #ifdef's for CONFIG_HUGETLB_PAGE?
Yes I see that. With git annotate we can even see who wrote it.
The code would be much cleaner if that #ifdef were removed. The author
was unaware that a dummy version of pmd_huge() existed in hugetlb.h,
making the entire if(pmd_huge()) huge block dead code.
I will prepare a patch that gets rid of the #ifdef CONFIG_HUGETLB_PAGE
in that file.
> You need
> them here too. The problem is that is_vm_hugetlb_page() is not #define to
> 0 for CONFIG_HUGETLB_PAGE=n so the clauses using HPAGE_* aren't compiled
> out like the author is expecting.
>
>> However, I call B.S. on your reasoning.
>>
>> It is a well established kernel idiom to supply dummy values for symbols that
>> are required to be defined in order to form a syntactically correct C program,
>> but that are known by the programmer to be used only on dead code paths.
>>
>> This is exactly what we are doing here.
>>
>> To do otherwise requires that code be cluttered with #ifdefery.
>>
>
> You're wrong,
Ok, then please tell me why:
1) the dummy version of is_vm_hugetlb_page() exists in hugetlb_inline.h?
2) the dummy version of PageHuge() exists in hugetlb.h
3) the dummy version of reset_vma_resv_huge_pages()
4) the dummy version of hugetlb_total_pages() exists in hugetlb.h
5) the dummy version of follow_hugetlb_page() exists in hugetlb.h
6) the dummy version of follow_huge_addr() exists in hugetlb.h
7) the dummy version of copy_hugetlb_page_range() exists in hugetlb.h
8) the dummy version of hugetlb_prefault() exists in hugetlb.h
9) the dummy version of unmap_hugepage_range() exists in hugetlb.h
10) the dummy version of hugetlb_report_meminfo() exists in hugetlb.h
11) the dummy version of hugetlb_report_node_meminfo() exists in hugetlb.h
12) the dummy version of follow_huge_pmd() exists in hugetlb.h
13) the dummy version of follow_huge_pud() exists in hugetlb.h
14) the dummy version of prepare_hugepage_range() exists in hugetlb.h
15) the dummy version of pmd_huge() exists in hugetlb.h
16) the dummy version of pud_huge() exists in hugetlb.h
17) the dummy version of is_hugepage_only_range() exists in hugetlb.h
17) the dummy version of hugetlb_free_pgd_range() exists in hugetlb.h
18) the dummy version of hugetlb_fault() exists in hugetlb.h
19) the dummy version of huge_pte_offset() exists in hugetlb.h
20) the dummy version of dequeue_hwpoisoned_huge_page() exists in hugetlb.h
21) the dummy version of copy_huge_page() exists in hugetlb.h
22) the dummy version of hugetlb_change_protection() exists in hugetlb.h
.
.
.
[Other non HUGETLB_PAGE examples omitted for conciseness]
> nobody should be using HPAGE_SHIFT unless they are working
> with hugepages and, in fact, that code that placed those "dummy values"
> for HPAGE_MASK and HPAGE_SIZE there has since been removed since 2005.
>
> Defining HPAGE_SHIFT to be PAGE_SHIFT is just stupid and doing so may
> allow the program to compile but will hide real bugs later on. In
> fact if you merged your patch, it would be a bug since the vma would have
> VM_HUGETLB but you'd now be operating on PAGE_SIZE pages!
>
> Like I said, we should be removing those existing definitions of
> HPAGE_MASK and HPAGE_SIZE rather than leaving them so someone like you can
> come along and pretend there's any legitimacy to them whatsoever and
> extend the insanity.
>
> You may not realize it, but changes to include/linux/hugetlb.h go through
> Andrew; Ralf won't be merging anything into this generic header file
> because of a mips problem.
Indeed, you may not realize that akpm has been on the to or cc list for
this entire thread because I explicitly put him there for this exact reason.
Thanks,
David Daney
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-17 1:00 ` David Daney
@ 2011-11-17 4:56 ` David Rientjes
2011-11-17 17:21 ` David Daney
0 siblings, 1 reply; 9+ messages in thread
From: David Rientjes @ 2011-11-17 4:56 UTC (permalink / raw)
To: David Daney
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, Andrew Morton,
linux-kernel@vger.kernel.org, David Daney
On Wed, 16 Nov 2011, David Daney wrote:
> > > It is a well established kernel idiom to supply dummy values for symbols
> > > that
> > > are required to be defined in order to form a syntactically correct C
> > > program,
> > > but that are known by the programmer to be used only on dead code paths.
> > >
> > > This is exactly what we are doing here.
> > >
> > > To do otherwise requires that code be cluttered with #ifdefery.
> > >
> >
> > You're wrong,
>
> Ok, then please tell me why:
>
> 1) the dummy version of is_vm_hugetlb_page() exists in hugetlb_inline.h?
> 2) the dummy version of PageHuge() exists in hugetlb.h
> 3) the dummy version of reset_vma_resv_huge_pages()
> 4) the dummy version of hugetlb_total_pages() exists in hugetlb.h
> 5) the dummy version of follow_hugetlb_page() exists in hugetlb.h
> 6) the dummy version of follow_huge_addr() exists in hugetlb.h
> 7) the dummy version of copy_hugetlb_page_range() exists in hugetlb.h
> 8) the dummy version of hugetlb_prefault() exists in hugetlb.h
> 9) the dummy version of unmap_hugepage_range() exists in hugetlb.h
> 10) the dummy version of hugetlb_report_meminfo() exists in hugetlb.h
> 11) the dummy version of hugetlb_report_node_meminfo() exists in hugetlb.h
> 12) the dummy version of follow_huge_pmd() exists in hugetlb.h
> 13) the dummy version of follow_huge_pud() exists in hugetlb.h
> 14) the dummy version of prepare_hugepage_range() exists in hugetlb.h
> 15) the dummy version of pmd_huge() exists in hugetlb.h
> 16) the dummy version of pud_huge() exists in hugetlb.h
> 17) the dummy version of is_hugepage_only_range() exists in hugetlb.h
> 17) the dummy version of hugetlb_free_pgd_range() exists in hugetlb.h
> 18) the dummy version of hugetlb_fault() exists in hugetlb.h
> 19) the dummy version of huge_pte_offset() exists in hugetlb.h
> 20) the dummy version of dequeue_hwpoisoned_huge_page() exists in hugetlb.h
> 21) the dummy version of copy_huge_page() exists in hugetlb.h
> 22) the dummy version of hugetlb_change_protection() exists in hugetlb.h
> .
> .
> .
> [Other non HUGETLB_PAGE examples omitted for conciseness]
>
To avoid the #ifdef's, but you'll notice that they return either NULL, 0,
or are a no-op. We don't substitute real values in dummy functions where
they could be used in generic code as though they were valid. That's the
problem with defining HPAGE_SHIFT to be PAGE_SHIFT and, yes, defining
HPAGE_MASK and HPAGE_SIZE as well shouldn't be done and should be removed.
We expect HPAGE_* to represent hugepages, not the native page size of the
bare metal. This is why we do things like
#define HPAGE_PMD_SHIFT ({ BUG(); 0; })
#define HPAGE_PMD_MASK ({ BUG(); 0; })
#define HPAGE_PMD_SIZE ({ BUG(); 0; })
for CONFIG_TRANSPARENT_HUGEPAGE=n. We don't want to pretend that they're
valid outside the context of hugepages.
We also never use HPAGE_SHIFT, HPAGE_MASK, or HPAGE_SIZE in generic code
that isn't dependent on CONFIG_HUGETLB_PAGE. If you'd like to submit a
patch to fix this in the mips tree, then that would be good, and if you'd
like to submit a patch to remove these dummy definitions all together by
auditing other arch code, then that would be great.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE
2011-11-17 4:56 ` David Rientjes
@ 2011-11-17 17:21 ` David Daney
0 siblings, 0 replies; 9+ messages in thread
From: David Daney @ 2011-11-17 17:21 UTC (permalink / raw)
To: David Rientjes
Cc: ralf@linux-mips.org, linux-mips@linux-mips.org, Andrew Morton,
linux-kernel@vger.kernel.org, David Daney
On 11/16/2011 08:56 PM, David Rientjes wrote:
> On Wed, 16 Nov 2011, David Daney wrote:
>
>>>> It is a well established kernel idiom to supply dummy values for symbols
>>>> that
>>>> are required to be defined in order to form a syntactically correct C
>>>> program,
>>>> but that are known by the programmer to be used only on dead code paths.
>>>>
>>>> This is exactly what we are doing here.
>>>>
>>>> To do otherwise requires that code be cluttered with #ifdefery.
>>>>
>>>
>>> You're wrong,
>>
>> Ok, then please tell me why:
>>
>> 1) the dummy version of is_vm_hugetlb_page() exists in hugetlb_inline.h?
>> 2) the dummy version of PageHuge() exists in hugetlb.h
[...]
>
> To avoid the #ifdef's,
Good, now we are on the same page.
The answer is not, as first suggested, to sprinkle #ifdefs all over the
place, but ...
> but you'll notice that they return either NULL, 0,
> or are a no-op. We don't substitute real values in dummy functions where
> they could be used in generic code as though they were valid. That's the
> problem with defining HPAGE_SHIFT to be PAGE_SHIFT and, yes, defining
> HPAGE_MASK and HPAGE_SIZE as well shouldn't be done and should be removed.
>
> We expect HPAGE_* to represent hugepages, not the native page size of the
> bare metal. This is why we do things like
>
> #define HPAGE_PMD_SHIFT ({ BUG(); 0; })
> #define HPAGE_PMD_MASK ({ BUG(); 0; })
> #define HPAGE_PMD_SIZE ({ BUG(); 0; })
... rather to fix HPAGE_SHIFT, HPAGE_MASK, and HPAGE_SIZE to be more
like these.
I will generate a version of the patch that does this, noting that it
the addition of a dummy definition of HPAGE_SHIFT is added to facilitate
cleaner architecture specific code for MIPS patches in linux-next.
Thanks,
David Daney
>
> for CONFIG_TRANSPARENT_HUGEPAGE=n. We don't want to pretend that they're
> valid outside the context of hugepages.
>
> We also never use HPAGE_SHIFT, HPAGE_MASK, or HPAGE_SIZE in generic code
> that isn't dependent on CONFIG_HUGETLB_PAGE. If you'd like to submit a
> patch to fix this in the mips tree, then that would be good, and if you'd
> like to submit a patch to remove these dummy definitions all together by
> auditing other arch code, then that would be great.
>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-11-17 17:21 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-16 19:43 [PATCH] hugetlb: Provide a default HPAGE_SHIFT if !CONFIG_HUGETLB_PAGE David Daney
2011-11-16 21:32 ` David Rientjes
2011-11-16 22:09 ` David Daney
2011-11-16 23:18 ` David Rientjes
2011-11-16 23:44 ` David Daney
2011-11-17 0:08 ` David Rientjes
2011-11-17 1:00 ` David Daney
2011-11-17 4:56 ` David Rientjes
2011-11-17 17:21 ` David Daney
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).