summaryrefslogtreecommitdiffstats
path: root/arch/mips64
diff options
context:
space:
mode:
authorKanoj Sarcar <kanoj@engr.sgi.com>2000-02-10 09:07:31 +0000
committerKanoj Sarcar <kanoj@engr.sgi.com>2000-02-10 09:07:31 +0000
commitc566573a9a2049a15f9e13375e7c1bf29fe84d0a (patch)
treefae60e5f2bc2184007dd77b27589f4891eef6b9d /arch/mips64
parentccd309e0011c2343f720b04f2b3fa2b1c2b3e530 (diff)
The pernode pgdat structure is now allocated out of the corresponding
node's memory, instead of having all the per node data in an array on node 0.
Diffstat (limited to 'arch/mips64')
-rw-r--r--arch/mips64/sgi-ip27/ip27-memory.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/mips64/sgi-ip27/ip27-memory.c b/arch/mips64/sgi-ip27/ip27-memory.c
index cbbea5709..6e547920b 100644
--- a/arch/mips64/sgi-ip27/ip27-memory.c
+++ b/arch/mips64/sgi-ip27/ip27-memory.c
@@ -33,7 +33,6 @@ typedef unsigned long pfn_t; /* into <asm/sn/types.h> */
extern char _end;
#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
-#define PFN_ALIGN(x) (((unsigned long)(x) + (PAGE_SIZE - 1)) & PAGE_MASK)
#define SLOT_IGNORED 0xffff
short slot_lastfilled_cache[MAX_COMPACT_NODES];
@@ -41,7 +40,7 @@ unsigned short slot_psize_cache[MAX_COMPACT_NODES][MAX_MEM_SLOTS];
static pfn_t numpages;
static pfn_t pagenr = 0;
-plat_pg_data_t plat_node_data[MAX_COMPACT_NODES];
+plat_pg_data_t *plat_node_data[MAX_COMPACT_NODES];
bootmem_data_t plat_node_bdata[MAX_COMPACT_NODES];
int numa_debug(void)
@@ -66,8 +65,8 @@ pfn_t node_getfirstfree(cnodeid_t cnode)
return KDM_TO_PHYS(SYMMON_STK_ADDR(nasid, 0));
#endif
if (cnode == 0)
- return (KDM_TO_PHYS(PFN_ALIGN(&_end) - (CKSEG0 - K0BASE))
- >> PAGE_SHIFT);
+ return (KDM_TO_PHYS(PAGE_ALIGN((unsigned long)(&_end)) -
+ (CKSEG0 - K0BASE)) >> PAGE_SHIFT);
return slot_getbasepfn(cnode, 0);
}
@@ -223,11 +222,12 @@ void __init prom_meminit(void)
cnodeid_t node;
pfn_t slot_firstpfn, slot_lastpfn, slot_freepfn;
unsigned long bootmap_size;
+ int node_datasz;
+ node_datasz = PFN_UP(sizeof(plat_pg_data_t));
mlreset();
numpages = szmem(0, 0);
for (node = (numnodes - 1); node >= 0; node--) {
- NODE_DATA(node)->bdata = plat_node_bdata + node;
slot_firstpfn = slot_getbasepfn(node, 0);
slot_lastpfn = slot_firstpfn + slot_getsize(node, 0);
slot_freepfn = node_getfirstfree(node);
@@ -236,6 +236,13 @@ void __init prom_meminit(void)
max_low_pfn = (slot_lastpfn - slot_firstpfn);
if (node != 0)
setup_test(node, slot_freepfn, slot_lastpfn);
+ /*
+ * Allocate the node data structure on the node first.
+ */
+ plat_node_data[node] = (plat_pg_data_t *)(__va(slot_freepfn \
+ << PAGE_SHIFT));
+ NODE_DATA(node)->bdata = plat_node_bdata + node;
+ slot_freepfn += node_datasz;
bootmap_size = init_bootmem_node(node, slot_freepfn,
slot_firstpfn, slot_lastpfn);
free_bootmem_node(node, slot_firstpfn << PAGE_SHIFT,