Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
alpha
include
asm
mmzone.h
Go to the documentation of this file.
1
/*
2
* Written by Kanoj Sarcar (
[email protected]
) Aug 99
3
* Adapted for the alpha wildfire architecture Jan 2001.
4
*/
5
#ifndef _ASM_MMZONE_H_
6
#define _ASM_MMZONE_H_
7
8
#include <asm/smp.h>
9
10
struct
bootmem_data_t
;
/* stupid forward decl. */
11
12
/*
13
* Following are macros that are specific to this numa platform.
14
*/
15
16
extern
pg_data_t
node_data
[];
17
18
#define alpha_pa_to_nid(pa) \
19
(alpha_mv.pa_to_nid \
20
? alpha_mv.pa_to_nid(pa) \
21
: (0))
22
#define node_mem_start(nid) \
23
(alpha_mv.node_mem_start \
24
? alpha_mv.node_mem_start(nid) \
25
: (0UL))
26
#define node_mem_size(nid) \
27
(alpha_mv.node_mem_size \
28
? alpha_mv.node_mem_size(nid) \
29
: ((nid) ? (0UL) : (~0UL)))
30
31
#define pa_to_nid(pa) alpha_pa_to_nid(pa)
32
#define NODE_DATA(nid) (&node_data[(nid)])
33
34
#define node_localnr(pfn, nid) ((pfn) - NODE_DATA(nid)->node_start_pfn)
35
36
#if 1
37
#define PLAT_NODE_DATA_LOCALNR(p, n) \
38
(((p) >> PAGE_SHIFT) - PLAT_NODE_DATA(n)->gendata.node_start_pfn)
39
#else
40
static
inline
unsigned
long
41
PLAT_NODE_DATA_LOCALNR
(
unsigned
long
p
,
int
n
)
42
{
43
unsigned
long
temp
;
44
temp = p >>
PAGE_SHIFT
;
45
return
temp - PLAT_NODE_DATA(n)->gendata.node_start_pfn;
46
}
47
#endif
48
49
#ifdef CONFIG_DISCONTIGMEM
50
51
/*
52
* Following are macros that each numa implementation must define.
53
*/
54
55
/*
56
* Given a kernel address, find the home node of the underlying memory.
57
*/
58
#define kvaddr_to_nid(kaddr) pa_to_nid(__pa(kaddr))
59
60
/*
61
* Given a kaddr, LOCAL_BASE_ADDR finds the owning node of the memory
62
* and returns the kaddr corresponding to first physical page in the
63
* node's mem_map.
64
*/
65
#define LOCAL_BASE_ADDR(kaddr) \
66
((unsigned long)__va(NODE_DATA(kvaddr_to_nid(kaddr))->node_start_pfn \
67
<< PAGE_SHIFT))
68
69
/* XXX: FIXME -- wli */
70
#define kern_addr_valid(kaddr) (0)
71
72
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
73
74
#define VALID_PAGE(page) (((page) - mem_map) < max_mapnr)
75
76
#define pmd_page(pmd) (pfn_to_page(pmd_val(pmd) >> 32))
77
#define pgd_page(pgd) (pfn_to_page(pgd_val(pgd) >> 32))
78
#define pte_pfn(pte) (pte_val(pte) >> 32)
79
80
#define mk_pte(page, pgprot) \
81
({ \
82
pte_t pte; \
83
unsigned long pfn; \
84
\
85
pfn = page_to_pfn(page) << 32; \
86
pte_val(pte) = pfn | pgprot_val(pgprot); \
87
\
88
pte; \
89
})
90
91
#define pte_page(x) \
92
({ \
93
unsigned long kvirt; \
94
struct page * __xx; \
95
\
96
kvirt = (unsigned long)__va(pte_val(x) >> (32-PAGE_SHIFT)); \
97
__xx = virt_to_page(kvirt); \
98
\
99
__xx; \
100
})
101
102
#define page_to_pa(page) \
103
(page_to_pfn(page) << PAGE_SHIFT)
104
105
#define pfn_to_nid(pfn) pa_to_nid(((u64)(pfn) << PAGE_SHIFT))
106
#define pfn_valid(pfn) \
107
(((pfn) - node_start_pfn(pfn_to_nid(pfn))) < \
108
node_spanned_pages(pfn_to_nid(pfn))) \
109
110
#define virt_addr_valid(kaddr) pfn_valid((__pa(kaddr) >> PAGE_SHIFT))
111
112
#endif
/* CONFIG_DISCONTIGMEM */
113
114
#endif
/* _ASM_MMZONE_H_ */
Generated on Thu Jan 10 2013 12:49:59 for Linux Kernel by
1.8.2