2006-03-27 13:15:25 +04:00
# ifndef __ASM_MEMORY_MODEL_H
# define __ASM_MEMORY_MODEL_H
# 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 */
/*
* supports 3 memory models .
*/
# if defined(CONFIG_FLATMEM)
2006-06-23 13:03:12 +04:00
# define __pfn_to_page(pfn) (mem_map + ((pfn) - ARCH_PFN_OFFSET))
# define __page_to_pfn(page) ((unsigned long)((page) - mem_map) + \
2006-03-27 13:15:25 +04:00
ARCH_PFN_OFFSET )
# elif defined(CONFIG_DISCONTIGMEM)
2006-06-23 13:03:12 +04:00
# define __pfn_to_page(pfn) \
2006-03-27 13:15:25 +04:00
( { unsigned long __pfn = ( pfn ) ; \
2008-11-08 15:53:33 +03:00
unsigned long __nid = arch_pfn_to_nid ( __pfn ) ; \
2006-03-27 13:15:25 +04:00
NODE_DATA ( __nid ) - > node_mem_map + arch_local_page_offset ( __pfn , __nid ) ; \
} )
2006-06-23 13:03:12 +04:00
# define __page_to_pfn(pg) \
2011-08-17 20:40:33 +04:00
( { const struct page * __pg = ( pg ) ; \
2006-03-27 13:15:55 +04:00
struct pglist_data * __pgdat = NODE_DATA ( page_to_nid ( __pg ) ) ; \
( unsigned long ) ( __pg - __pgdat - > node_mem_map ) + \
__pgdat - > node_start_pfn ; \
2006-03-27 13:15:25 +04:00
} )
2007-10-16 12:24:13 +04:00
# elif defined(CONFIG_SPARSEMEM_VMEMMAP)
tree-wide: fix assorted typos all over the place
That is "success", "unknown", "through", "performance", "[re|un]mapping"
, "access", "default", "reasonable", "[con]currently", "temperature"
, "channel", "[un]used", "application", "example","hierarchy", "therefore"
, "[over|under]flow", "contiguous", "threshold", "enough" and others.
Signed-off-by: André Goddard Rosa <andre.goddard@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2009-11-14 18:09:05 +03:00
/* memmap is virtually contiguous. */
2007-10-16 12:24:13 +04:00
# define __pfn_to_page(pfn) (vmemmap + (pfn))
2008-12-25 15:38:59 +03:00
# define __page_to_pfn(page) (unsigned long)((page) - vmemmap)
2007-10-16 12:24:13 +04:00
2006-03-27 13:15:25 +04:00
# elif defined(CONFIG_SPARSEMEM)
/*
2013-10-03 15:38:14 +04:00
* Note : section ' s mem_map is encoded to reflect its start_pfn .
2006-03-27 13:15:25 +04:00
* section [ i ] . section_mem_map = = mem_map ' s address - start_pfn ;
*/
2006-06-23 13:03:12 +04:00
# define __page_to_pfn(pg) \
2011-08-17 20:40:33 +04:00
( { const struct page * __pg = ( pg ) ; \
2006-03-27 13:15:25 +04:00
int __sec = page_to_section ( __pg ) ; \
2007-02-10 12:42:59 +03:00
( unsigned long ) ( __pg - __section_mem_map_addr ( __nr_to_section ( __sec ) ) ) ; \
2006-03-27 13:15:25 +04:00
} )
2006-06-23 13:03:12 +04:00
# define __pfn_to_page(pfn) \
2006-03-27 13:15:25 +04:00
( { unsigned long __pfn = ( pfn ) ; \
struct mem_section * __sec = __pfn_to_section ( __pfn ) ; \
__section_mem_map_addr ( __sec ) + __pfn ; \
} )
# endif /* CONFIG_FLATMEM/DISCONTIGMEM/SPARSEMEM */
2006-06-23 13:03:12 +04:00
# define page_to_pfn __page_to_pfn
# define pfn_to_page __pfn_to_page
2006-03-27 13:15:25 +04:00
# endif /* __ASSEMBLY__ */
# endif