Re: [RFC] bootmem for 2.5

William Lee Irwin III
2001-11-08T00:45:44Z

On Mon, Nov 05, 2001 at 10:23:45PM -0500, Robert Love wrote:
> The patch is without problem on 2.4.13-ac7. Free memory increased by
> about 100K: free and dmesg both confirm 384292k vs 384196k. This is a
> P3-733 on an i815 with 384MB. Very nice.
>
> Note that the patch and UP-APIC do not get along. Some quick debugging
> with William found the cause. APIC does indeed touch bootmem. The
> above is thus obviously with CONFIG_X86_UP_APIC unset.
>
> Robert Love

I've managed to reproduce the problem, and I heard from you elsewhere
that you've verified the fix (although it appeared to reduce the memory
savings to 4KB).

start_segment_treap() is a macro (operating largely on the same
principle as list_entry()) which converts a treap_node_t * to a struct *
given the field and struct name by computing offsets and casting. The
casting renders this somewhat less than type safe, and the patch below
corrects a type error I committed in calling it (the start_tree field
is already of type treap_node_t *).

Thanks again,
Bill
-----------------
willir@us.ibm.com

diff -urN linux-broken/mm/bootmem.c linux-bootmem/mm/bootmem.c
--- linux-broken/mm/bootmem.c Wed Nov 7 16:31:37 2001
+++ linux-bootmem/mm/bootmem.c Wed Nov 7 16:31:09 2001
@@ -860,7 +860,7 @@
while(pgdat) {
unsigned in_node;

- tree = start_segment_treap(&pgdat->bdata->segment_tree.start_tree);
+ tree = start_segment_treap(pgdat->bdata->segment_tree.start_tree);
in_node = segment_tree_intersects(tree, &segment);
in_any_node |= in_node;