Browse Source

generic: add phys_addr_t for holding physical addresses

Add a kernel-wide "phys_addr_t" which is guaranteed to be able to hold
any physical address.  By default it equals the word size of the
architecture, but a 32-bit architecture can set ARCH_PHYS_ADDR_T_64BIT
if it needs a 64-bit phys_addr_t.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Jeremy Fitzhardinge 17 years ago
parent
commit
600715dcdf

+ 3 - 0
arch/powerpc/Kconfig

@@ -22,6 +22,9 @@ config WORD_SIZE
 config PPC_MERGE
 config PPC_MERGE
 	def_bool y
 	def_bool y
 
 
+config ARCH_PHYS_ADDR_T_64BIT
+       def_bool PPC64 || PHYS_64BIT
+
 config MMU
 config MMU
 	bool
 	bool
 	default y
 	default y

+ 0 - 7
arch/powerpc/include/asm/types.h

@@ -48,13 +48,6 @@ typedef struct {
 
 
 typedef __vector128 vector128;
 typedef __vector128 vector128;
 
 
-/* Physical address used by some IO functions */
-#if defined(CONFIG_PPC64) || defined(CONFIG_PHYS_64BIT)
-typedef u64 phys_addr_t;
-#else
-typedef u32 phys_addr_t;
-#endif
-
 #ifdef __powerpc64__
 #ifdef __powerpc64__
 typedef u64 dma_addr_t;
 typedef u64 dma_addr_t;
 #else
 #else

+ 3 - 0
arch/x86/Kconfig

@@ -932,6 +932,9 @@ config X86_PAE
 	  has the cost of more pagetable lookup overhead, and also
 	  has the cost of more pagetable lookup overhead, and also
 	  consumes more pagetable space per process.
 	  consumes more pagetable space per process.
 
 
+config ARCH_PHYS_ADDR_T_64BIT
+       def_bool X86_64 || X86_PAE
+
 # Common NUMA Features
 # Common NUMA Features
 config NUMA
 config NUMA
 	bool "Numa Memory Allocation and Scheduler Support (EXPERIMENTAL)"
 	bool "Numa Memory Allocation and Scheduler Support (EXPERIMENTAL)"

+ 0 - 2
include/asm-x86/page_32.h

@@ -33,7 +33,6 @@ typedef u64	pmdval_t;
 typedef u64	pudval_t;
 typedef u64	pudval_t;
 typedef u64	pgdval_t;
 typedef u64	pgdval_t;
 typedef u64	pgprotval_t;
 typedef u64	pgprotval_t;
-typedef u64	phys_addr_t;
 
 
 typedef union {
 typedef union {
 	struct {
 	struct {
@@ -54,7 +53,6 @@ typedef unsigned long	pmdval_t;
 typedef unsigned long	pudval_t;
 typedef unsigned long	pudval_t;
 typedef unsigned long	pgdval_t;
 typedef unsigned long	pgdval_t;
 typedef unsigned long	pgprotval_t;
 typedef unsigned long	pgprotval_t;
-typedef unsigned long	phys_addr_t;
 
 
 typedef union {
 typedef union {
 	pteval_t pte;
 	pteval_t pte;

+ 0 - 1
include/asm-x86/page_64.h

@@ -79,7 +79,6 @@ typedef unsigned long	pmdval_t;
 typedef unsigned long	pudval_t;
 typedef unsigned long	pudval_t;
 typedef unsigned long	pgdval_t;
 typedef unsigned long	pgdval_t;
 typedef unsigned long	pgprotval_t;
 typedef unsigned long	pgprotval_t;
-typedef unsigned long	phys_addr_t;
 
 
 typedef struct page *pgtable_t;
 typedef struct page *pgtable_t;
 
 

+ 6 - 0
include/linux/types.h

@@ -197,6 +197,12 @@ typedef u64 resource_size_t;
 typedef u32 resource_size_t;
 typedef u32 resource_size_t;
 #endif
 #endif
 
 
+#ifdef CONFIG_PHYS_ADDR_T_64BIT
+typedef u64 phys_addr_t;
+#else
+typedef u32 phys_addr_t;
+#endif
+
 struct ustat {
 struct ustat {
 	__kernel_daddr_t	f_tfree;
 	__kernel_daddr_t	f_tfree;
 	__kernel_ino_t		f_tinode;
 	__kernel_ino_t		f_tinode;

+ 3 - 0
mm/Kconfig

@@ -187,6 +187,9 @@ config RESOURCES_64BIT
 	help
 	help
 	  This option allows memory and IO resources to be 64 bit.
 	  This option allows memory and IO resources to be 64 bit.
 
 
+config PHYS_ADDR_T_64BIT
+	def_bool 64BIT || ARCH_PHYS_ADDR_T_64BIT
+
 config ZONE_DMA_FLAG
 config ZONE_DMA_FLAG
 	int
 	int
 	default "0" if !ZONE_DMA
 	default "0" if !ZONE_DMA