Re: [patch] mm: node-setup agnostic free_bootmem()

From: Ingo Molnar
Date: Tue Apr 29 2008 - 10:25:51 EST



* Johannes Weiner <hannes@xxxxxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/