* Johannes Weiner <hannes@saeurebad.de> wrote:
quoted text > > 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
--
unsubscribe notice To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
majordomo@vger.kernel.org
More majordomo info at
http://vger.kernel.org/majordomo-info.html
Please read the FAQ at
http://www.tux.org/lkml/
Messages in current thread:
Re: [patch] mm: node-setup agnostic free_bootmem() , Ingo Molnar , (Tue Apr 29, 7:25 am)