Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Jeremy Fitzhardinge

Andi Kleen wrote:

THREAD_ORDER should be used on 32bit too.

32bit also has the equivalent of irq stacks (quite similar) 
and exception stacks (somewhat different). Currently they use

other defines, but they could use the same. Also i386 has varying
irqstack orders disabling them with 8k stacks, but that is something
that would be best dropped and irqstacks always used imho.
[...]
It might be, but it's not a 64bit specific concept.
  


OK.  That's out of the scope of these particular patches, since they're 
restricting themselves to just unifying what's there.  Another pass 
could definitely tidy a lot more up.



Yes they do, but hardcoding that doesn't make sense because it varies.
We already got CPUs with 36, 38, 40 and 48 bits phys size.

The only size that could be hard coded would be 52 bit (theoretical max), but 
that also doesn't make sense if all we want to do is to mask off NX.
  


OK.  I'll see how much removing it gains us.

   J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Andi Kleen
On Mon, Jan 07, 2008 at 02:13:52PM -0800, Jeremy Fitzhardinge wrote:
> Andi Kleen wrote:
>>> +
>>> +#define LARGE_PAGE_SIZE(_AC(1,UL) << PMD_SHIFT)
>>> +#define LARGE_PAGE_MASK(~(LARGE_PAGE_SIZE-1))
>>> +
>>> +#define HPAGE_SHIFTPMD_SHIFT
>>> +#define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT)
>>> +#define HPAGE_MASK (~(HPAGE_SIZE - 1))
>>> +#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
>>> 
>>
>> This will actually stop being the same soon with GB pages which
>> are only supported on 64bit.
>>   
>
> I was wondering about that.  Will you always use GB pages, or will there be 

When available and not disabled yes.

> two classes of huge pages, or will it be a runtime/compiletime config?

hugetlbfs will use different classes of huge pages depending on configuration
(I haven't posted those patches yet, only those for the direct mapping) 
That all is expressed by different macros.

All runtime; I expect no CONFIGs involved, except that 32bit won't have
it since the architecture doesn't support it there.



>
>>> +
>>> +#ifdef CONFIG_X86_64
>>> +#define THREAD_ORDER   1
>>> +#define THREAD_SIZE  (PAGE_SIZE << THREAD_ORDER)
>>> +#define CURRENT_MASK (~(THREAD_SIZE-1))
>>> +
>>> +#define EXCEPTION_STACK_ORDER 0
>>> +#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
>>> +
>>> +#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
>>> +#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)
>>> +
>>> +#define IRQSTACK_ORDER 2
>>> +#define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER)
>>> 
>>
>> This all seems hardly 64bit specific (except for THREAD_ORDER
>> but you can probably handle that in Kconfig or just get rid
>> of it for 32bit)
>>   
>
> They're only used by 64-bit at the moment, aren't they?  Or are you 

THREAD_ORDER should be used on 32bit too.

32bit also has the equivalent of irq stacks (quite similar) 
and exception stacks (somewhat different). Currently they use
other defines, but they could use the same. Also i386 has varying
irqstack orders disabling them with 8k stacks, but that is something
that would be best dropped and irqstacks always used imho.

>>> +#define __PHYSICAL_START   CONFIG_PHYSICAL_START
>>> 
>>
>> Also not 64bit specific
>>   
>
> It's use is 64-bit specific though, isn't it?

It might be, but it's not a 64bit specific concept.

>
>>> +#ifdef CONFIG_X86_PAE
>>> +#define __PHYSICAL_MASK_SHIFT  36
>>> 
>>
>> I originally added the PHYSICAL_MASK stuff to deal with masking off NX,
>> but I must admit it wasn't the best idea I ever had. It would be probably
>> better to just get rid of it and always mask off the high reserved flags 
>> bit
>> explicitely. If you make that 0 then there should be no special
>> case for PAE.
>>   
>
> Hm, OK.  I thought different 64-bit implementations might have different 
> sized physical address spaces or something.

Yes they do, but hardcoding that doesn't make sense because it varies.
We already got CPUs with 36, 38, 40 and 48 bits phys size.

The only size that could be hard coded would be 52 bit (theoretical max), but 
that also doesn't make sense if all we want to do is to mask off NX.

The only code that needs to know the real physical size is the MTRR
code, but that one gets it from CPUID as it should.

-Andi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Jeremy Fitzhardinge

Andi Kleen wrote:

+
+#define LARGE_PAGE_SIZE(_AC(1,UL) << PMD_SHIFT)
+#define LARGE_PAGE_MASK(~(LARGE_PAGE_SIZE-1))
+
+#define HPAGE_SHIFTPMD_SHIFT
+#define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT)
+#define HPAGE_MASK (~(HPAGE_SIZE - 1))
+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)



This will actually stop being the same soon with GB pages which
are only supported on 64bit.
  


I was wondering about that.  Will you always use GB pages, or will there 
be two classes of huge pages, or will it be a runtime/compiletime config?



+
+#ifdef CONFIG_X86_64
+#define THREAD_ORDER   1
+#define THREAD_SIZE  (PAGE_SIZE << THREAD_ORDER)
+#define CURRENT_MASK (~(THREAD_SIZE-1))
+
+#define EXCEPTION_STACK_ORDER 0
+#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
+
+#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
+#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)
+
+#define IRQSTACK_ORDER 2
+#define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER)



This all seems hardly 64bit specific (except for THREAD_ORDER
but you can probably handle that in Kconfig or just get rid
of it for 32bit)
  


They're only used by 64-bit at the moment, aren't they?  Or are you 
suggesting 32-bit could use them too?  There's no corresponding 
definitions on the 32-bit side at the moment.



+#define __PHYSICAL_START   CONFIG_PHYSICAL_START



Also not 64bit specific
  


It's use is 64-bit specific though, isn't it?


+#ifdef CONFIG_X86_PAE
+#define __PHYSICAL_MASK_SHIFT  36



I originally added the PHYSICAL_MASK stuff to deal with masking off NX,
but I must admit it wasn't the best idea I ever had. It would be probably
better to just get rid of it and always mask off the high reserved flags bit
explicitely. If you make that 0 then there should be no special
case for PAE.
  


Hm, OK.  I thought different 64-bit implementations might have different 
sized physical address spaces or something.



   J
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Andi Kleen

> +
> +#define LARGE_PAGE_SIZE  (_AC(1,UL) << PMD_SHIFT)
> +#define LARGE_PAGE_MASK  (~(LARGE_PAGE_SIZE-1))
> +
> +#define HPAGE_SHIFT  PMD_SHIFT
> +#define HPAGE_SIZE   (_AC(1,UL) << HPAGE_SHIFT)
> +#define HPAGE_MASK   (~(HPAGE_SIZE - 1))
> +#define HUGETLB_PAGE_ORDER   (HPAGE_SHIFT - PAGE_SHIFT)

This will actually stop being the same soon with GB pages which
are only supported on 64bit.

> +
> +#ifdef CONFIG_X86_64
> +#define THREAD_ORDER 1
> +#define THREAD_SIZE  (PAGE_SIZE << THREAD_ORDER)
> +#define CURRENT_MASK (~(THREAD_SIZE-1))
> +
> +#define EXCEPTION_STACK_ORDER 0
> +#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
> +
> +#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
> +#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)
> +
> +#define IRQSTACK_ORDER 2
> +#define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER)

This all seems hardly 64bit specific (except for THREAD_ORDER
but you can probably handle that in Kconfig or just get rid
of it for 32bit)

> +#define __PHYSICAL_START CONFIG_PHYSICAL_START

Also not 64bit specific

> +#ifdef CONFIG_X86_PAE
> +#define __PHYSICAL_MASK_SHIFT36

I originally added the PHYSICAL_MASK stuff to deal with masking off NX,
but I must admit it wasn't the best idea I ever had. It would be probably
better to just get rid of it and always mask off the high reserved flags bit
explicitely. If you make that 0 then there should be no special
case for PAE.

-Andi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Andi Kleen

 +
 +#define LARGE_PAGE_SIZE  (_AC(1,UL)  PMD_SHIFT)
 +#define LARGE_PAGE_MASK  (~(LARGE_PAGE_SIZE-1))
 +
 +#define HPAGE_SHIFT  PMD_SHIFT
 +#define HPAGE_SIZE   (_AC(1,UL)  HPAGE_SHIFT)
 +#define HPAGE_MASK   (~(HPAGE_SIZE - 1))
 +#define HUGETLB_PAGE_ORDER   (HPAGE_SHIFT - PAGE_SHIFT)

This will actually stop being the same soon with GB pages which
are only supported on 64bit.

 +
 +#ifdef CONFIG_X86_64
 +#define THREAD_ORDER 1
 +#define THREAD_SIZE  (PAGE_SIZE  THREAD_ORDER)
 +#define CURRENT_MASK (~(THREAD_SIZE-1))
 +
 +#define EXCEPTION_STACK_ORDER 0
 +#define EXCEPTION_STKSZ (PAGE_SIZE  EXCEPTION_STACK_ORDER)
 +
 +#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
 +#define DEBUG_STKSZ (PAGE_SIZE  DEBUG_STACK_ORDER)
 +
 +#define IRQSTACK_ORDER 2
 +#define IRQSTACKSIZE (PAGE_SIZE  IRQSTACK_ORDER)

This all seems hardly 64bit specific (except for THREAD_ORDER
but you can probably handle that in Kconfig or just get rid
of it for 32bit)

 +#define __PHYSICAL_START CONFIG_PHYSICAL_START

Also not 64bit specific

 +#ifdef CONFIG_X86_PAE
 +#define __PHYSICAL_MASK_SHIFT36

I originally added the PHYSICAL_MASK stuff to deal with masking off NX,
but I must admit it wasn't the best idea I ever had. It would be probably
better to just get rid of it and always mask off the high reserved flags bit
explicitely. If you make that 0 then there should be no special
case for PAE.

-Andi
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Jeremy Fitzhardinge

Andi Kleen wrote:

+
+#define LARGE_PAGE_SIZE(_AC(1,UL)  PMD_SHIFT)
+#define LARGE_PAGE_MASK(~(LARGE_PAGE_SIZE-1))
+
+#define HPAGE_SHIFTPMD_SHIFT
+#define HPAGE_SIZE (_AC(1,UL)  HPAGE_SHIFT)
+#define HPAGE_MASK (~(HPAGE_SIZE - 1))
+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)



This will actually stop being the same soon with GB pages which
are only supported on 64bit.
  


I was wondering about that.  Will you always use GB pages, or will there 
be two classes of huge pages, or will it be a runtime/compiletime config?



+
+#ifdef CONFIG_X86_64
+#define THREAD_ORDER   1
+#define THREAD_SIZE  (PAGE_SIZE  THREAD_ORDER)
+#define CURRENT_MASK (~(THREAD_SIZE-1))
+
+#define EXCEPTION_STACK_ORDER 0
+#define EXCEPTION_STKSZ (PAGE_SIZE  EXCEPTION_STACK_ORDER)
+
+#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
+#define DEBUG_STKSZ (PAGE_SIZE  DEBUG_STACK_ORDER)
+
+#define IRQSTACK_ORDER 2
+#define IRQSTACKSIZE (PAGE_SIZE  IRQSTACK_ORDER)



This all seems hardly 64bit specific (except for THREAD_ORDER
but you can probably handle that in Kconfig or just get rid
of it for 32bit)
  


They're only used by 64-bit at the moment, aren't they?  Or are you 
suggesting 32-bit could use them too?  There's no corresponding 
definitions on the 32-bit side at the moment.



+#define __PHYSICAL_START   CONFIG_PHYSICAL_START



Also not 64bit specific
  


It's use is 64-bit specific though, isn't it?


+#ifdef CONFIG_X86_PAE
+#define __PHYSICAL_MASK_SHIFT  36



I originally added the PHYSICAL_MASK stuff to deal with masking off NX,
but I must admit it wasn't the best idea I ever had. It would be probably
better to just get rid of it and always mask off the high reserved flags bit
explicitely. If you make that 0 then there should be no special
case for PAE.
  


Hm, OK.  I thought different 64-bit implementations might have different 
sized physical address spaces or something.



   J
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Andi Kleen
On Mon, Jan 07, 2008 at 02:13:52PM -0800, Jeremy Fitzhardinge wrote:
 Andi Kleen wrote:
 +
 +#define LARGE_PAGE_SIZE(_AC(1,UL)  PMD_SHIFT)
 +#define LARGE_PAGE_MASK(~(LARGE_PAGE_SIZE-1))
 +
 +#define HPAGE_SHIFTPMD_SHIFT
 +#define HPAGE_SIZE (_AC(1,UL)  HPAGE_SHIFT)
 +#define HPAGE_MASK (~(HPAGE_SIZE - 1))
 +#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
 

 This will actually stop being the same soon with GB pages which
 are only supported on 64bit.
   

 I was wondering about that.  Will you always use GB pages, or will there be 

When available and not disabled yes.

 two classes of huge pages, or will it be a runtime/compiletime config?

hugetlbfs will use different classes of huge pages depending on configuration
(I haven't posted those patches yet, only those for the direct mapping) 
That all is expressed by different macros.

All runtime; I expect no CONFIGs involved, except that 32bit won't have
it since the architecture doesn't support it there.




 +
 +#ifdef CONFIG_X86_64
 +#define THREAD_ORDER   1
 +#define THREAD_SIZE  (PAGE_SIZE  THREAD_ORDER)
 +#define CURRENT_MASK (~(THREAD_SIZE-1))
 +
 +#define EXCEPTION_STACK_ORDER 0
 +#define EXCEPTION_STKSZ (PAGE_SIZE  EXCEPTION_STACK_ORDER)
 +
 +#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
 +#define DEBUG_STKSZ (PAGE_SIZE  DEBUG_STACK_ORDER)
 +
 +#define IRQSTACK_ORDER 2
 +#define IRQSTACKSIZE (PAGE_SIZE  IRQSTACK_ORDER)
 

 This all seems hardly 64bit specific (except for THREAD_ORDER
 but you can probably handle that in Kconfig or just get rid
 of it for 32bit)
   

 They're only used by 64-bit at the moment, aren't they?  Or are you 

THREAD_ORDER should be used on 32bit too.

32bit also has the equivalent of irq stacks (quite similar) 
and exception stacks (somewhat different). Currently they use
other defines, but they could use the same. Also i386 has varying
irqstack orders disabling them with 8k stacks, but that is something
that would be best dropped and irqstacks always used imho.

 +#define __PHYSICAL_START   CONFIG_PHYSICAL_START
 

 Also not 64bit specific
   

 It's use is 64-bit specific though, isn't it?

It might be, but it's not a 64bit specific concept.


 +#ifdef CONFIG_X86_PAE
 +#define __PHYSICAL_MASK_SHIFT  36
 

 I originally added the PHYSICAL_MASK stuff to deal with masking off NX,
 but I must admit it wasn't the best idea I ever had. It would be probably
 better to just get rid of it and always mask off the high reserved flags 
 bit
 explicitely. If you make that 0 then there should be no special
 case for PAE.
   

 Hm, OK.  I thought different 64-bit implementations might have different 
 sized physical address spaces or something.

Yes they do, but hardcoding that doesn't make sense because it varies.
We already got CPUs with 36, 38, 40 and 48 bits phys size.

The only size that could be hard coded would be 52 bit (theoretical max), but 
that also doesn't make sense if all we want to do is to mask off NX.

The only code that needs to know the real physical size is the MTRR
code, but that one gets it from CPUID as it should.

-Andi
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1 of 8] x86: page.h: unify constants

2008-01-07 Thread Jeremy Fitzhardinge

Andi Kleen wrote:

THREAD_ORDER should be used on 32bit too.

32bit also has the equivalent of irq stacks (quite similar) 
and exception stacks (somewhat different). Currently they use

other defines, but they could use the same. Also i386 has varying
irqstack orders disabling them with 8k stacks, but that is something
that would be best dropped and irqstacks always used imho.
[...]
It might be, but it's not a 64bit specific concept.
  


OK.  That's out of the scope of these particular patches, since they're 
restricting themselves to just unifying what's there.  Another pass 
could definitely tidy a lot more up.



Yes they do, but hardcoding that doesn't make sense because it varies.
We already got CPUs with 36, 38, 40 and 48 bits phys size.

The only size that could be hard coded would be 52 bit (theoretical max), but 
that also doesn't make sense if all we want to do is to mask off NX.
  


OK.  I'll see how much removing it gains us.

   J
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1 of 8] x86: page.h: unify constants

2008-01-03 Thread Jeremy Fitzhardinge
# HG changeset patch
# User Jeremy Fitzhardinge <[EMAIL PROTECTED]>
# Date 1199317360 28800
# Node ID ba0ec40a50a7aef1a3153cea124c35e261f5a2df
# Parent  c45c263179cb78284b6b869c574457df088027d1
x86: page.h: unify constants

There are many constants which are shared by 32 and 64-bit.

Signed-off-by: Jeremy Fitzhardinge <[EMAIL PROTECTED]>

---
 include/asm-x86/page.h|  130 +
 include/asm-x86/page_32.h |   46 ---
 include/asm-x86/page_64.h |   73 -
 3 files changed, 119 insertions(+), 130 deletions(-)

diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h
--- a/include/asm-x86/page.h
+++ b/include/asm-x86/page.h
@@ -1,13 +1,116 @@
-#ifdef __KERNEL__
-# ifdef CONFIG_X86_32
-#  include "page_32.h"
-# else
-#  include "page_64.h"
-# endif
+#ifndef _ASM_X86_PAGE_H
+#define _ASM_X86_PAGE_H
+
+#include 
+
+/* PAGE_SHIFT determines the page size */
+#define PAGE_SHIFT 12
+#define PAGE_SIZE  (_AC(1,UL) << PAGE_SHIFT)
+#define PAGE_MASK  (~(PAGE_SIZE-1))
+
+#define PHYSICAL_PAGE_MASK (PAGE_MASK & __PHYSICAL_MASK)
+
+#define LARGE_PAGE_SIZE(_AC(1,UL) << PMD_SHIFT)
+#define LARGE_PAGE_MASK(~(LARGE_PAGE_SIZE-1))
+
+#define HPAGE_SHIFTPMD_SHIFT
+#define HPAGE_SIZE (_AC(1,UL) << HPAGE_SHIFT)
+#define HPAGE_MASK (~(HPAGE_SIZE - 1))
+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
+
+/* to align the pointer to the (next) page boundary */
+#define PAGE_ALIGN(addr)   (((addr)+PAGE_SIZE-1)_MASK)
+
+#define __PHYSICAL_MASK((_AC(1,UL) << __PHYSICAL_MASK_SHIFT) - 
1)
+#define __VIRTUAL_MASK ((_AC(1,UL) << __VIRTUAL_MASK_SHIFT) - 1)
+
+
+#ifdef CONFIG_X86_64
+#define THREAD_ORDER   1
+#define THREAD_SIZE  (PAGE_SIZE << THREAD_ORDER)
+#define CURRENT_MASK (~(THREAD_SIZE-1))
+
+#define EXCEPTION_STACK_ORDER 0
+#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER)
+
+#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
+#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER)
+
+#define IRQSTACK_ORDER 2
+#define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER)
+
+#define STACKFAULT_STACK 1
+#define DOUBLEFAULT_STACK 2
+#define NMI_STACK 3
+#define DEBUG_STACK 4
+#define MCE_STACK 5
+#define N_EXCEPTION_STACKS 5  /* hw limit: 7 */
+
+#define __PAGE_OFFSET   _AC(0x8100, UL)
+
+#define __PHYSICAL_START   CONFIG_PHYSICAL_START
+#define __KERNEL_ALIGN 0x20
+
+/*
+ * Make sure kernel is aligned to 2MB address. Catching it at compile
+ * time is better. Change your config file and compile the kernel
+ * for a 2MB aligned address (CONFIG_PHYSICAL_START)
+ */
+#if (CONFIG_PHYSICAL_START % __KERNEL_ALIGN) != 0
+#error "CONFIG_PHYSICAL_START must be a multiple of 2MB"
+#endif
+
+#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)
+#define __START_KERNEL_map _AC(0x8000, UL)
+
+/* See Documentation/x86_64/mm.txt for a description of the memory map. */
+#define __PHYSICAL_MASK_SHIFT  46
+#define __VIRTUAL_MASK_SHIFT   48
+
+#define KERNEL_TEXT_SIZE  (40*1024*1024)
+#define KERNEL_TEXT_START _AC(0x8000, UL)
+
+#endif /* CONFIG_X86_64 */
+
+#ifdef CONFIG_X86_32
+
+/*
+ * This handles the memory map.
+ *
+ * A __PAGE_OFFSET of 0xC000 means that the kernel has
+ * a virtual address space of one gigabyte, which limits the
+ * amount of physical memory you can use to about 950MB.
+ *
+ * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
+ * and CONFIG_HIGHMEM64G options in the kernel configuration.
+ */
+#define __PAGE_OFFSET  _AC(CONFIG_PAGE_OFFSET, UL)
+
+#ifdef CONFIG_X86_PAE
+#define __PHYSICAL_MASK_SHIFT  36
+#define __VIRTUAL_MASK_SHIFT   32
+#else  /* !CONFIG_X86_PAE */
+#define __PHYSICAL_MASK_SHIFT  32
+#define __VIRTUAL_MASK_SHIFT   32
+#endif /* CONFIG_X86_PAE */
+
+#ifdef CONFIG_HUGETLB_PAGE
+#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
+#endif
+
+#endif /* CONFIG_X86_32 */
+
+#define PAGE_OFFSET((unsigned long)__PAGE_OFFSET)
+
+#define VM_DATA_DEFAULT_FLAGS \
+   (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \
+VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+
+
+#ifdef CONFIG_X86_32
+# include "page_32.h"
 #else
-# ifdef __i386__
-#  include "page_32.h"
-# else
-#  include "page_64.h"
-# endif
+# include "page_64.h"
 #endif
+
+#endif /* _ASM_X86_PAGE_H */
diff --git a/include/asm-x86/page_32.h b/include/asm-x86/page_32.h
--- a/include/asm-x86/page_32.h
+++ b/include/asm-x86/page_32.h
@@ -1,13 +1,5 @@
 #ifndef _I386_PAGE_H
 #define _I386_PAGE_H
-
-/* PAGE_SHIFT determines the page size */
-#define PAGE_SHIFT 12
-#define PAGE_SIZE  (1UL << PAGE_SHIFT)
-#define PAGE_MASK  (~(PAGE_SIZE-1))
-
-#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
-#define LARGE_PAGE_SIZE (1UL << PMD_SHIFT)
 
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
@@ -111,7 +103,6 @@ static inline 

[PATCH 1 of 8] x86: page.h: unify constants

2008-01-03 Thread Jeremy Fitzhardinge
# HG changeset patch
# User Jeremy Fitzhardinge [EMAIL PROTECTED]
# Date 1199317360 28800
# Node ID ba0ec40a50a7aef1a3153cea124c35e261f5a2df
# Parent  c45c263179cb78284b6b869c574457df088027d1
x86: page.h: unify constants

There are many constants which are shared by 32 and 64-bit.

Signed-off-by: Jeremy Fitzhardinge [EMAIL PROTECTED]

---
 include/asm-x86/page.h|  130 +
 include/asm-x86/page_32.h |   46 ---
 include/asm-x86/page_64.h |   73 -
 3 files changed, 119 insertions(+), 130 deletions(-)

diff --git a/include/asm-x86/page.h b/include/asm-x86/page.h
--- a/include/asm-x86/page.h
+++ b/include/asm-x86/page.h
@@ -1,13 +1,116 @@
-#ifdef __KERNEL__
-# ifdef CONFIG_X86_32
-#  include page_32.h
-# else
-#  include page_64.h
-# endif
+#ifndef _ASM_X86_PAGE_H
+#define _ASM_X86_PAGE_H
+
+#include linux/const.h
+
+/* PAGE_SHIFT determines the page size */
+#define PAGE_SHIFT 12
+#define PAGE_SIZE  (_AC(1,UL)  PAGE_SHIFT)
+#define PAGE_MASK  (~(PAGE_SIZE-1))
+
+#define PHYSICAL_PAGE_MASK (PAGE_MASK  __PHYSICAL_MASK)
+
+#define LARGE_PAGE_SIZE(_AC(1,UL)  PMD_SHIFT)
+#define LARGE_PAGE_MASK(~(LARGE_PAGE_SIZE-1))
+
+#define HPAGE_SHIFTPMD_SHIFT
+#define HPAGE_SIZE (_AC(1,UL)  HPAGE_SHIFT)
+#define HPAGE_MASK (~(HPAGE_SIZE - 1))
+#define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT)
+
+/* to align the pointer to the (next) page boundary */
+#define PAGE_ALIGN(addr)   (((addr)+PAGE_SIZE-1)PAGE_MASK)
+
+#define __PHYSICAL_MASK((_AC(1,UL)  __PHYSICAL_MASK_SHIFT) - 
1)
+#define __VIRTUAL_MASK ((_AC(1,UL)  __VIRTUAL_MASK_SHIFT) - 1)
+
+
+#ifdef CONFIG_X86_64
+#define THREAD_ORDER   1
+#define THREAD_SIZE  (PAGE_SIZE  THREAD_ORDER)
+#define CURRENT_MASK (~(THREAD_SIZE-1))
+
+#define EXCEPTION_STACK_ORDER 0
+#define EXCEPTION_STKSZ (PAGE_SIZE  EXCEPTION_STACK_ORDER)
+
+#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1)
+#define DEBUG_STKSZ (PAGE_SIZE  DEBUG_STACK_ORDER)
+
+#define IRQSTACK_ORDER 2
+#define IRQSTACKSIZE (PAGE_SIZE  IRQSTACK_ORDER)
+
+#define STACKFAULT_STACK 1
+#define DOUBLEFAULT_STACK 2
+#define NMI_STACK 3
+#define DEBUG_STACK 4
+#define MCE_STACK 5
+#define N_EXCEPTION_STACKS 5  /* hw limit: 7 */
+
+#define __PAGE_OFFSET   _AC(0x8100, UL)
+
+#define __PHYSICAL_START   CONFIG_PHYSICAL_START
+#define __KERNEL_ALIGN 0x20
+
+/*
+ * Make sure kernel is aligned to 2MB address. Catching it at compile
+ * time is better. Change your config file and compile the kernel
+ * for a 2MB aligned address (CONFIG_PHYSICAL_START)
+ */
+#if (CONFIG_PHYSICAL_START % __KERNEL_ALIGN) != 0
+#error CONFIG_PHYSICAL_START must be a multiple of 2MB
+#endif
+
+#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START)
+#define __START_KERNEL_map _AC(0x8000, UL)
+
+/* See Documentation/x86_64/mm.txt for a description of the memory map. */
+#define __PHYSICAL_MASK_SHIFT  46
+#define __VIRTUAL_MASK_SHIFT   48
+
+#define KERNEL_TEXT_SIZE  (40*1024*1024)
+#define KERNEL_TEXT_START _AC(0x8000, UL)
+
+#endif /* CONFIG_X86_64 */
+
+#ifdef CONFIG_X86_32
+
+/*
+ * This handles the memory map.
+ *
+ * A __PAGE_OFFSET of 0xC000 means that the kernel has
+ * a virtual address space of one gigabyte, which limits the
+ * amount of physical memory you can use to about 950MB.
+ *
+ * If you want more physical memory than this then see the CONFIG_HIGHMEM4G
+ * and CONFIG_HIGHMEM64G options in the kernel configuration.
+ */
+#define __PAGE_OFFSET  _AC(CONFIG_PAGE_OFFSET, UL)
+
+#ifdef CONFIG_X86_PAE
+#define __PHYSICAL_MASK_SHIFT  36
+#define __VIRTUAL_MASK_SHIFT   32
+#else  /* !CONFIG_X86_PAE */
+#define __PHYSICAL_MASK_SHIFT  32
+#define __VIRTUAL_MASK_SHIFT   32
+#endif /* CONFIG_X86_PAE */
+
+#ifdef CONFIG_HUGETLB_PAGE
+#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA
+#endif
+
+#endif /* CONFIG_X86_32 */
+
+#define PAGE_OFFSET((unsigned long)__PAGE_OFFSET)
+
+#define VM_DATA_DEFAULT_FLAGS \
+   (((current-personality  READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \
+VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+
+
+#ifdef CONFIG_X86_32
+# include page_32.h
 #else
-# ifdef __i386__
-#  include page_32.h
-# else
-#  include page_64.h
-# endif
+# include page_64.h
 #endif
+
+#endif /* _ASM_X86_PAGE_H */
diff --git a/include/asm-x86/page_32.h b/include/asm-x86/page_32.h
--- a/include/asm-x86/page_32.h
+++ b/include/asm-x86/page_32.h
@@ -1,13 +1,5 @@
 #ifndef _I386_PAGE_H
 #define _I386_PAGE_H
-
-/* PAGE_SHIFT determines the page size */
-#define PAGE_SHIFT 12
-#define PAGE_SIZE  (1UL  PAGE_SHIFT)
-#define PAGE_MASK  (~(PAGE_SIZE-1))
-
-#define LARGE_PAGE_MASK (~(LARGE_PAGE_SIZE-1))
-#define LARGE_PAGE_SIZE (1UL  PMD_SHIFT)
 
 #ifdef __KERNEL__
 #ifndef __ASSEMBLY__
@@ -111,7 +103,6 @@ static inline pte_t native_make_pte(unsi