2004-09-17 01:26:23

by David Gibson

[permalink] [raw]
Subject: [PPC64] Remove LARGE_PAGE_SHIFT constant

Andrew, please apply:

For historical reasons, ppc64 has ended up with two #defines for the
size of a large (16M) page: LARGE_PAGE_SHIFT and HPAGE_SHIFT. This
patch removes LARGE_PAGE_SHIFT in favour of the more widely used
HPAGE_SHIFT.

Signed-off-by: David Gibson <[email protected]>

Index: working-2.6/arch/ppc64/kernel/pSeries_htab.c
===================================================================
--- working-2.6.orig/arch/ppc64/kernel/pSeries_htab.c 2004-08-09 09:51:38.000000000 +1000
+++ working-2.6/arch/ppc64/kernel/pSeries_htab.c 2004-09-16 17:04:56.034685808 +1000
@@ -325,7 +325,7 @@
va = (vsid << 28) | (batch->addr[i] & 0x0fffffff);
batch->vaddr[j] = va;
if (large)
- vpn = va >> LARGE_PAGE_SHIFT;
+ vpn = va >> HPAGE_SHIFT;
else
vpn = va >> PAGE_SHIFT;
hash = hpt_hash(vpn, large);
Index: working-2.6/include/asm-ppc64/mmu.h
===================================================================
--- working-2.6.orig/include/asm-ppc64/mmu.h 2004-09-16 16:58:48.170699448 +1000
+++ working-2.6/include/asm-ppc64/mmu.h 2004-09-16 17:04:44.306603944 +1000
@@ -119,8 +119,6 @@
#define PT_SHIFT (12) /* Page Table */
#define PT_MASK 0x02FF

-#define LARGE_PAGE_SHIFT 24
-
static inline unsigned long hpt_hash(unsigned long vpn, int large)
{
unsigned long vsid;
Index: working-2.6/arch/ppc64/mm/hash_utils.c
===================================================================
--- working-2.6.orig/arch/ppc64/mm/hash_utils.c 2004-09-15 10:53:53.000000000 +1000
+++ working-2.6/arch/ppc64/mm/hash_utils.c 2004-09-16 17:04:20.121686024 +1000
@@ -100,7 +100,7 @@
int ret;

if (large)
- vpn = va >> LARGE_PAGE_SHIFT;
+ vpn = va >> HPAGE_SHIFT;
else
vpn = va >> PAGE_SHIFT;

@@ -332,7 +332,7 @@

va = (vsid << 28) | (ea & 0x0fffffff);
if (large)
- vpn = va >> LARGE_PAGE_SHIFT;
+ vpn = va >> HPAGE_SHIFT;
else
vpn = va >> PAGE_SHIFT;
hash = hpt_hash(vpn, large);
Index: working-2.6/arch/ppc64/mm/hugetlbpage.c
===================================================================
--- working-2.6.orig/arch/ppc64/mm/hugetlbpage.c 2004-09-07 10:38:00.000000000 +1000
+++ working-2.6/arch/ppc64/mm/hugetlbpage.c 2004-09-16 17:03:34.673672800 +1000
@@ -853,7 +853,7 @@
vsid = get_vsid(context.id, ea);

va = (vsid << 28) | (ea & 0x0fffffff);
- vpn = va >> LARGE_PAGE_SHIFT;
+ vpn = va >> HPAGE_SHIFT;
hash = hpt_hash(vpn, 1);
if (hugepte_val(pte) & _HUGEPAGE_SECONDARY)
hash = ~hash;

--
David Gibson | For every complex problem there is a
david AT gibson.dropbear.id.au | solution which is simple, neat and
| wrong.
http://www.ozlabs.org/people/dgibson


2004-09-17 18:25:10

by Marcelo Tosatti

[permalink] [raw]
Subject: Re: [PPC64] Remove LARGE_PAGE_SHIFT constant

On Fri, Sep 17, 2004 at 11:13:20AM +1000, David Gibson wrote:
> Andrew, please apply:
>
> For historical reasons, ppc64 has ended up with two #defines for the
> size of a large (16M) page: LARGE_PAGE_SHIFT and HPAGE_SHIFT. This
> patch removes LARGE_PAGE_SHIFT in favour of the more widely used
> HPAGE_SHIFT.

Nitpicking, "LARGE_PAGE_xxx" is used by x86/x86_64:

#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
#define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)

Wouldnt it be nice to keep consistency between archs?

2004-09-17 18:41:02

by Dave Hansen

[permalink] [raw]
Subject: Re: [PPC64] Remove LARGE_PAGE_SHIFT constant

On Fri, 2004-09-17 at 10:03, Marcelo Tosatti wrote:
> On Fri, Sep 17, 2004 at 11:13:20AM +1000, David Gibson wrote:
> > Andrew, please apply:
> >
> > For historical reasons, ppc64 has ended up with two #defines for the
> > size of a large (16M) page: LARGE_PAGE_SHIFT and HPAGE_SHIFT. This
> > patch removes LARGE_PAGE_SHIFT in favour of the more widely used
> > HPAGE_SHIFT.
>
> Nitpicking, "LARGE_PAGE_xxx" is used by x86/x86_64:
>
> #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
> #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
>
> Wouldnt it be nice to keep consistency between archs?

Actually, if everybody makes sure to define PMD_SHIFT, we should be able
to use common macros, right?

-- Dave

2004-09-17 18:55:22

by Marcelo Tosatti

[permalink] [raw]
Subject: Re: [PPC64] Remove LARGE_PAGE_SHIFT constant

On Fri, Sep 17, 2004 at 11:40:29AM -0700, Dave Hansen wrote:
> On Fri, 2004-09-17 at 10:03, Marcelo Tosatti wrote:
> > On Fri, Sep 17, 2004 at 11:13:20AM +1000, David Gibson wrote:
> > > Andrew, please apply:
> > >
> > > For historical reasons, ppc64 has ended up with two #defines for the
> > > size of a large (16M) page: LARGE_PAGE_SHIFT and HPAGE_SHIFT. This
> > > patch removes LARGE_PAGE_SHIFT in favour of the more widely used
> > > HPAGE_SHIFT.
> >
> > Nitpicking, "LARGE_PAGE_xxx" is used by x86/x86_64:
> >
> > #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
> > #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
> >
> > Wouldnt it be nice to keep consistency between archs?
>
> Actually, if everybody makes sure to define PMD_SHIFT, we should be able
> to use common macros, right?

Yeap.

2004-09-18 02:37:25

by Paul Mackerras

[permalink] [raw]
Subject: Re: [PPC64] Remove LARGE_PAGE_SHIFT constant

Dave Hansen writes:

> Actually, if everybody makes sure to define PMD_SHIFT, we should be able
> to use common macros, right?

No, because LARGE_PAGE_SHIFT != PMD_SHIFT on ppc64.

Paul.

2004-09-18 07:42:20

by David Gibson

[permalink] [raw]
Subject: Re: [PPC64] Remove LARGE_PAGE_SHIFT constant

On Fri, Sep 17, 2004 at 02:03:28PM -0300, Marcelo Tosatti wrote:
> On Fri, Sep 17, 2004 at 11:13:20AM +1000, David Gibson wrote:
> > Andrew, please apply:
> >
> > For historical reasons, ppc64 has ended up with two #defines for the
> > size of a large (16M) page: LARGE_PAGE_SHIFT and HPAGE_SHIFT. This
> > patch removes LARGE_PAGE_SHIFT in favour of the more widely used
> > HPAGE_SHIFT.
>
> Nitpicking, "LARGE_PAGE_xxx" is used by x86/x86_64:
>
> #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
> #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
>
> Wouldnt it be nice to keep consistency between archs?

Hrm... they are indeed there. However *all* archs, including x86 and
x86_64 have HPAGE_SHIFT et al - it's used in generic code, so x86 has
the duplicate #defines as well.

Actually.. I guess the distinction is that LARGE_PAGE_* refer to the
hardware large page size, whereas HPAGE_SIZE refers to the software
page size used for hugetlbfs. I think those are identical for all
arches at the moment, but they wouldn't have to be.

--
David Gibson | For every complex problem there is a
david AT gibson.dropbear.id.au | solution which is simple, neat and
| wrong.
http://www.ozlabs.org/people/dgibson

2004-09-18 07:42:03

by David Gibson

[permalink] [raw]
Subject: Re: [PPC64] Remove LARGE_PAGE_SHIFT constant

On Fri, Sep 17, 2004 at 02:33:34PM -0300, Marcelo Tosatti wrote:
> On Fri, Sep 17, 2004 at 11:40:29AM -0700, Dave Hansen wrote:
> > On Fri, 2004-09-17 at 10:03, Marcelo Tosatti wrote:
> > > On Fri, Sep 17, 2004 at 11:13:20AM +1000, David Gibson wrote:
> > > > Andrew, please apply:
> > > >
> > > > For historical reasons, ppc64 has ended up with two #defines for the
> > > > size of a large (16M) page: LARGE_PAGE_SHIFT and HPAGE_SHIFT. This
> > > > patch removes LARGE_PAGE_SHIFT in favour of the more widely used
> > > > HPAGE_SHIFT.
> > >
> > > Nitpicking, "LARGE_PAGE_xxx" is used by x86/x86_64:
> > >
> > > #define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
> > > #define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
> > >
> > > Wouldnt it be nice to keep consistency between archs?
> >
> > Actually, if everybody makes sure to define PMD_SHIFT, we should be able
> > to use common macros, right?
>
> Yeap.

No. The large page shift is not necessarily the same as the
PMD_SHIFT. It's the same on x86, but it is less on sparc64 and sh,
and greater on ppc64.

--
David Gibson | For every complex problem there is a
david AT gibson.dropbear.id.au | solution which is simple, neat and
| wrong.
http://www.ozlabs.org/people/dgibson