2005-04-17 02:20:36 +04:00
/* K8 NUMA support */
/* Copyright 2002,2003 by Andi Kleen, SuSE Labs */
/* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */
# ifndef _ASM_X86_64_MMZONE_H
# define _ASM_X86_64_MMZONE_H 1
2005-06-23 11:08:06 +04:00
# ifdef CONFIG_NUMA
2005-04-17 02:20:36 +04:00
# define VIRTUAL_BUG_ON(x)
# include <asm/smp.h>
/* Simple perfect hash to map physical addresses to node numbers */
2006-03-25 18:31:46 +03:00
struct memnode {
int shift ;
2007-02-13 15:26:19 +03:00
unsigned int mapsize ;
u8 * map ;
u8 embedded_map [ 64 - 16 ] ;
} ____cacheline_aligned ; /* total size = 64 bytes */
2006-03-25 18:31:46 +03:00
extern struct memnode memnode ;
# define memnode_shift memnode.shift
# define memnodemap memnode.map
2007-02-13 15:26:19 +03:00
# define memnodemapsize memnode.mapsize
2005-04-17 02:20:36 +04:00
extern struct pglist_data * node_data [ ] ;
static inline __attribute__ ( ( pure ) ) int phys_to_nid ( unsigned long addr )
{
2005-11-05 19:25:54 +03:00
unsigned nid ;
2007-02-13 15:26:19 +03:00
VIRTUAL_BUG_ON ( ! memnodemap ) ;
VIRTUAL_BUG_ON ( ( addr > > memnode_shift ) > = memnodemapsize ) ;
2005-04-17 02:20:36 +04:00
nid = memnodemap [ addr > > memnode_shift ] ;
2005-11-05 19:25:54 +03:00
VIRTUAL_BUG_ON ( nid > = MAX_NUMNODES | | ! node_data [ nid ] ) ;
2005-04-17 02:20:36 +04:00
return nid ;
}
# define NODE_DATA(nid) (node_data[nid])
# define node_start_pfn(nid) (NODE_DATA(nid)->node_start_pfn)
# define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \
NODE_DATA ( nid ) - > node_spanned_pages )
2005-06-23 11:08:06 +04:00
# ifdef CONFIG_DISCONTIGMEM
# define pfn_to_nid(pfn) phys_to_nid((unsigned long)(pfn) << PAGE_SHIFT)
2005-04-17 02:20:36 +04:00
2006-01-12 00:46:27 +03:00
extern int pfn_valid ( unsigned long pfn ) ;
2005-04-17 02:20:36 +04:00
# endif
2005-06-23 11:08:06 +04:00
2007-02-13 15:26:22 +03:00
# ifdef CONFIG_NUMA_EMU
# define FAKE_NODE_MIN_SIZE (64*1024*1024)
2007-05-02 21:27:09 +04:00
# define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1uL))
2007-02-13 15:26:22 +03:00
# endif
2005-06-23 11:08:06 +04:00
# endif
2005-04-17 02:20:36 +04:00
# endif