Messages in this thread | | | Date | Tue, 29 Apr 2008 16:25:20 +0200 | From | Ingo Molnar <> | Subject | Re: [patch] mm: node-setup agnostic free_bootmem() |
| |
* Johannes Weiner <hannes@saeurebad.de> wrote:
> > void __init free_bootmem(unsigned long addr, unsigned long size) > > { > > bootmem_data_t *bdata; > > - list_for_each_entry(bdata, &bdata_list, list) > > - free_bootmem_core(bdata, addr, size); > > + unsigned long pos = addr; > > + unsigned long partsize = size; > > + > > + list_for_each_entry(bdata, &bdata_list, list) { > > + unsigned long remainder = 0; > > + > > + if (pos < bdata->node_boot_start) > > + continue; > > + > > + if (PFN_DOWN(pos + partsize) > bdata->node_low_pfn) { > > + remainder = PFN_DOWN(pos + partsize) - bdata->node_low_pfn; > > + partsize -= remainder; > > + } > > + > > + free_bootmem_core(bdata, pos, partsize); > > + > > + if (!remainder) > > + return; > > + > > + pos = PFN_PHYS(bdata->node_low_pfn + 1); > > + } > > + printk(KERN_ERR "free_bootmem: request: addr=%lx, size=%lx, " > > + "state: pos=%lx, partsize=%lx\n", addr, size, > > + pos, partsize); > > + BUG(); > > } > > > > unsigned long __init free_all_bootmem(void) > > Yes, looks good. But needs explicit testing, I guess.
yep, but as Yinghai Lu has pointed it out, this removes a cross-node allocation fix. That fix has to be preserved in any cleanup, agreed?
in general bootmem should assume the weirdest of NUMA topologies and be defensive about them. Topologies will only become more complex, never less complex.
Ingo
| |