Blame view

include/asm-generic/memory_model.h 1.94 KB
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
1
2
  #ifndef __ASM_MEMORY_MODEL_H
  #define __ASM_MEMORY_MODEL_H
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  #ifndef __ASSEMBLY__
  
  #if defined(CONFIG_FLATMEM)
  
  #ifndef ARCH_PFN_OFFSET
  #define ARCH_PFN_OFFSET		(0UL)
  #endif
  
  #elif defined(CONFIG_DISCONTIGMEM)
  
  #ifndef arch_pfn_to_nid
  #define arch_pfn_to_nid(pfn)	pfn_to_nid(pfn)
  #endif
  
  #ifndef arch_local_page_offset
  #define arch_local_page_offset(pfn, nid)	\
  	((pfn) - NODE_DATA(nid)->node_start_pfn)
  #endif
  
  #endif /* CONFIG_DISCONTIGMEM */
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
23
24
25
26
  /*
   * supports 3 memory models.
   */
  #if defined(CONFIG_FLATMEM)
67de64821   Andy Whitcroft   [PATCH] squash du...
27
28
  #define __pfn_to_page(pfn)	(mem_map + ((pfn) - ARCH_PFN_OFFSET))
  #define __page_to_pfn(page)	((unsigned long)((page) - mem_map) + \
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
29
30
  				 ARCH_PFN_OFFSET)
  #elif defined(CONFIG_DISCONTIGMEM)
67de64821   Andy Whitcroft   [PATCH] squash du...
31
  #define __pfn_to_page(pfn)			\
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
32
  ({	unsigned long __pfn = (pfn);		\
c5d712433   Rafael J. Wysocki   Fix __pfn_to_page...
33
  	unsigned long __nid = arch_pfn_to_nid(__pfn);  \
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
34
35
  	NODE_DATA(__nid)->node_mem_map + arch_local_page_offset(__pfn, __nid);\
  })
67de64821   Andy Whitcroft   [PATCH] squash du...
36
  #define __page_to_pfn(pg)						\
aa462abe8   Ian Campbell   mm: fix __page_to...
37
  ({	const struct page *__pg = (pg);					\
a0140c1d8   KAMEZAWA Hiroyuki   [PATCH] remove zo...
38
39
40
  	struct pglist_data *__pgdat = NODE_DATA(page_to_nid(__pg));	\
  	(unsigned long)(__pg - __pgdat->node_mem_map) +			\
  	 __pgdat->node_start_pfn;					\
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
41
  })
8f6aac419   Christoph Lameter   Generic Virtual M...
42
  #elif defined(CONFIG_SPARSEMEM_VMEMMAP)
af901ca18   AndrĂ© Goddard Rosa   tree-wide: fix as...
43
  /* memmap is virtually contiguous.  */
8f6aac419   Christoph Lameter   Generic Virtual M...
44
  #define __pfn_to_page(pfn)	(vmemmap + (pfn))
32272a269   Martin Schwidefsky   [S390] __page_to_...
45
  #define __page_to_pfn(page)	(unsigned long)((page) - vmemmap)
8f6aac419   Christoph Lameter   Generic Virtual M...
46

a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
47
48
49
50
51
  #elif defined(CONFIG_SPARSEMEM)
  /*
   * Note: section's mem_map is encorded to reflect its start_pfn.
   * section[i].section_mem_map == mem_map's address - start_pfn;
   */
67de64821   Andy Whitcroft   [PATCH] squash du...
52
  #define __page_to_pfn(pg)					\
aa462abe8   Ian Campbell   mm: fix __page_to...
53
  ({	const struct page *__pg = (pg);				\
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
54
  	int __sec = page_to_section(__pg);			\
f05b6284e   Randy Dunlap   [PATCH] typeof __...
55
  	(unsigned long)(__pg - __section_mem_map_addr(__nr_to_section(__sec)));	\
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
56
  })
67de64821   Andy Whitcroft   [PATCH] squash du...
57
  #define __pfn_to_page(pfn)				\
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
58
59
60
61
62
  ({	unsigned long __pfn = (pfn);			\
  	struct mem_section *__sec = __pfn_to_section(__pfn);	\
  	__section_mem_map_addr(__sec) + __pfn;		\
  })
  #endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */
67de64821   Andy Whitcroft   [PATCH] squash du...
63

67de64821   Andy Whitcroft   [PATCH] squash du...
64
65
  #define page_to_pfn __page_to_pfn
  #define pfn_to_page __pfn_to_page
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
66
67
  
  #endif /* __ASSEMBLY__ */
a117e66ed   KAMEZAWA Hiroyuki   [PATCH] unify pfn...
68
69
  
  #endif