void startup_build_mem_nodes(struct memlist *list) { pfn_t start, end; /* LINTED: ASSERT will always true or false */ ASSERT(NBBY * sizeof (mnodeset_t) >= max_mem_nodes); if (&plat_build_mem_nodes) { plat_build_mem_nodes(list); } else { /* * Boot install lists are arranged <addr, len>, ... */ while (list) { start = list->ml_address >> PAGESHIFT; if (start > physmax) continue; end = (list->ml_address + list->ml_size - 1) >> PAGESHIFT; if (end > physmax) end = physmax; mem_node_add_range(start, end); list = list->ml_next; } mem_node_physalign = 0; mem_node_pfn_shift = 0; } }
void startup_build_mem_nodes(prom_memlist_t *list, size_t nelems) { size_t elem; pfn_t basepfn; pgcnt_t npgs; /* LINTED: ASSERT will always true or false */ ASSERT(NBBY * sizeof (mnodeset_t) >= max_mem_nodes); if (&plat_build_mem_nodes != NULL) { plat_build_mem_nodes(list, nelems); } else { /* * Boot install lists are arranged <addr, len>, ... */ for (elem = 0; elem < nelems; list++, elem++) { basepfn = btop(list->addr); npgs = btop(list->size); mem_node_add_range(basepfn, basepfn + npgs - 1); } } }