home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-x86_64 / mmzone.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.3 KB  |  52 lines

  1. /* K8 NUMA support */
  2. /* Copyright 2002,2003 by Andi Kleen, SuSE Labs */
  3. /* 2.5 Version loosely based on the NUMAQ Code by Pat Gaughen. */
  4. #ifndef _ASM_X86_64_MMZONE_H
  5. #define _ASM_X86_64_MMZONE_H 1
  6.  
  7.  
  8. #ifdef CONFIG_NUMA
  9.  
  10. #define VIRTUAL_BUG_ON(x) 
  11.  
  12. #include <asm/smp.h>
  13.  
  14. /* Should really switch to dynamic allocation at some point */
  15. #define NODEMAPSIZE 0x4fff
  16.  
  17. /* Simple perfect hash to map physical addresses to node numbers */
  18. struct memnode {
  19.     int shift;
  20.     u8 map[NODEMAPSIZE];
  21. } ____cacheline_aligned;
  22. extern struct memnode memnode;
  23. #define memnode_shift memnode.shift
  24. #define memnodemap memnode.map
  25.  
  26. extern struct pglist_data *node_data[];
  27.  
  28. static inline __attribute__((pure)) int phys_to_nid(unsigned long addr) 
  29.     unsigned nid; 
  30.     VIRTUAL_BUG_ON((addr >> memnode_shift) >= NODEMAPSIZE);
  31.     nid = memnodemap[addr >> memnode_shift]; 
  32.     VIRTUAL_BUG_ON(nid >= MAX_NUMNODES || !node_data[nid]); 
  33.     return nid; 
  34.  
  35. #define NODE_DATA(nid)        (node_data[nid])
  36.  
  37. #define node_start_pfn(nid)    (NODE_DATA(nid)->node_start_pfn)
  38. #define node_end_pfn(nid)       (NODE_DATA(nid)->node_start_pfn + \
  39.                  NODE_DATA(nid)->node_spanned_pages)
  40.  
  41. #ifdef CONFIG_DISCONTIGMEM
  42. #define pfn_to_nid(pfn) phys_to_nid((unsigned long)(pfn) << PAGE_SHIFT)
  43. #define kvaddr_to_nid(kaddr)    phys_to_nid(__pa(kaddr))
  44.  
  45. extern int pfn_valid(unsigned long pfn);
  46. #endif
  47.  
  48. #endif
  49. #endif
  50.