2005-04-16 15:20:36 -07:00
/*
* Written by Pat Gaughen ( gone @ us . ibm . com ) Mar 2002
*
*/
2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_MMZONE_32_H
# define _ASM_X86_MMZONE_32_H
2005-04-16 15:20:36 -07:00
# include <asm/smp.h>
2005-07-07 17:56:39 -07:00
# ifdef CONFIG_NUMA
2005-06-23 00:07:57 -07:00
extern struct pglist_data * node_data [ ] ;
# define NODE_DATA(nid) (node_data[nid])
2005-04-16 15:20:36 -07:00
2008-06-08 18:31:54 -07:00
# include <asm/numaq.h>
2005-04-16 15:20:36 -07:00
2008-11-12 23:22:35 +01:00
extern void resume_map_numa_kva ( pgd_t * pgd ) ;
2005-07-07 17:56:39 -07:00
# else /* !CONFIG_NUMA */
2006-09-25 23:31:03 -07:00
2008-11-12 23:22:35 +01:00
static inline void resume_map_numa_kva ( pgd_t * pgd ) { }
2005-06-23 00:07:57 -07:00
# endif /* CONFIG_NUMA */
# ifdef CONFIG_DISCONTIGMEM
2005-04-16 15:20:36 -07:00
/*
* generic node memory support , the following assumptions apply :
*
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 13:09:05 -02:00
* 1 ) memory comes in 64 Mb contiguous chunks which are either present or not
2005-04-16 15:20:36 -07:00
* 2 ) we will not have more than 64 Gb in total
*
* for now assume that 64 Gb is max amount of RAM for whole system
* 64 Gb / 4096 bytes / page = 16777216 pages
*/
# define MAX_NR_PAGES 16777216
2008-05-31 22:51:51 -07:00
# define MAX_ELEMENTS 1024
2005-04-16 15:20:36 -07:00
# define PAGES_PER_ELEMENT (MAX_NR_PAGES / MAX_ELEMENTS)
extern s8 physnode_map [ ] ;
static inline int pfn_to_nid ( unsigned long pfn )
{
# ifdef CONFIG_NUMA
return ( ( int ) physnode_map [ ( pfn ) / PAGES_PER_ELEMENT ] ) ;
# else
return 0 ;
# endif
}
/*
* Following are macros that each numa implmentation must define .
*/
# define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
# define node_end_pfn(nid) \
( { \
pg_data_t * __pgdat = NODE_DATA ( nid ) ; \
__pgdat - > node_start_pfn + __pgdat - > node_spanned_pages ; \
} )
static inline int pfn_valid ( int pfn )
{
int nid = pfn_to_nid ( pfn ) ;
if ( nid > = 0 )
return ( pfn < node_end_pfn ( nid ) ) ;
return 0 ;
}
2005-06-23 00:07:57 -07:00
# endif /* CONFIG_DISCONTIGMEM */
# ifdef CONFIG_NEED_MULTIPLE_NODES
2009-02-24 11:57:20 +09:00
/* always use node 0 for bootmem on this numa platform */
2009-03-01 16:06:56 +09:00
# define bootmem_arch_preferred_node(__bdata, size, align, goal, limit) \
( NODE_DATA ( 0 ) - > bdata )
2005-06-23 00:07:57 -07:00
# endif /* CONFIG_NEED_MULTIPLE_NODES */
2005-06-23 00:07:52 -07:00
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_MMZONE_32_H */