/* * Copyright 2000, Silicon Graphics, sprasad@engr.sgi.com * Copyright 2000, Kanoj Sarcar, kanoj@sgi.com */ /* * Contains common definitions and globals for NUMA platform * support. For now, SN-IA64 and SN-MIPS are the NUMA platforms. */ #include #include #include #include #include #include extern int numnodes ; plat_pg_data_t plat_node_data[MAXNODES]; bootmem_data_t bdata[MAXNODES]; int chunktonid[MAXCHUNKS]; int nasid_map[MAXNASIDS]; void __init init_chunktonid(void) { memset(chunktonid, -1, sizeof(chunktonid)) ; } void __init init_nodeidmap(void) { memset(nasid_map, -1, sizeof(nasid_map)) ; } int cnodeid_map[MAXNODES] ; void __init init_cnodeidmap(void) { memset(cnodeid_map, -1, sizeof(cnodeid_map)) ; } int numa_debug(void) { panic("NUMA debug\n"); return(0); } int __init build_cnodeid_map(void) { int i,j ; for (i=0,j=0;i= 0) cnodeid_map[j++] = i ; } return j ; } /* * Since efi_memmap_walk merges contiguous banks, this code will need * to find all the nasids covered by the input memory descriptor. */ static int __init build_nasid_map(unsigned long start, unsigned long end, void *arg) { unsigned long vaddr = start; int nasid = GetNasId(__pa(vaddr)); while (vaddr < end) { if (nasid < MAXNASIDS) nasid_map[nasid] = 0; else panic("build_nasid_map"); vaddr = (unsigned long)__va((unsigned long)(++nasid) << SN1_NODE_ADDR_SHIFT); } return 0; } void __init fix_nasid_map(void) { int i ; int j ; /* For every nasid */ for (j=0;jbdata ; printk("%d 0x%016lx 0x%016lx 0x%016lx\n", i, bdata->node_boot_start, bdata->node_low_pfn, (unsigned long)bdata->node_bootmem_map) ; } } void __init discontig_mem_init(void) { extern void setup_sn1_bootmem(int); int maxnodes ; init_chunktonid() ; init_nodeidmap() ; init_cnodeidmap() ; efi_memmap_walk(build_nasid_map, 0) ; maxnodes = build_cnodeid_map() ; fix_nasid_map() ; #ifdef CONFIG_DISCONTIGMEM setup_sn1_bootmem(maxnodes) ; #endif numnodes = maxnodes; dump_bootmem_info() ; } void dump_node_data(void) { int i; printk("NODE DATA ....\n") ; printk("Node, Start, Size, MemMap, BitMap, StartP, Mapnr, Size, Id\n") ; for (i=0;ivalid_addr_bitmap, NODE_DATA(i)->node_start_paddr, NODE_DATA(i)->node_start_mapnr, NODE_DATA(i)->node_size, NODE_DATA(i)->node_id) ; } }