Eric,
In northbridge.c
Another typo error
/* If so place the one with the most stringent alignment first */ if (mem2->align > mem1->align) { struct resource *tmp; tmp = mem1; mem1 = mem2; mem2 = mem1; } /* Now place the memory as high up as it will go */ mem2->base = resource_max(mem2); mem1->limit = mem2->base - 1; mem1->base = resource_max(mem1);
----> /* If so place the one with the most stringent alignment first */ if (mem2->align > mem1->align) { struct resource *tmp; tmp = mem1; mem1 = mem2; mem2 = tmp; } /* Now place the memory as high up as it will go */ mem2->base = resource_max(mem2); mem1->limit = mem2->base - 1; mem1->base = resource_max(mem1);
Another question is
Should do align big allocation at first or align small first.
It seems you should do align big allocation.
Align big first
base1: 0xd0000000 limit1: 0xfebfffff size: 0x18800000 align: 28 base2: 0xec000000 limit2: 0xfebfffff size: 0x06b00000 align: 26 base1: 0xd8000000 limit1: 0xdfffffff size: 0x06b00000 align: 26 base2: 0xe0000000 limit2: 0xfebfffff size: 0x18800000 align: 28 PCI_DOMAIN: 0000 00 <- [0x0000001000 - 0x0000005fff] io PCI_DOMAIN: 0000 01 <- [0x00e0000000 - 0x00f87fffff] prefmem PCI_DOMAIN: 0000 02 <- [0x00d8000000 - 0x00deafffff] mem
Align small first base1: 0xd0000000 limit1: 0xfebfffff size: 0x18800000 align: 28 base2: 0xec000000 limit2: 0xfebfffff size: 0x06b00000 align: 26 base1: 0xd0000000 limit1: 0xf7ffffff size: 0x18800000 align: 28 base2: 0xf8000000 limit2: 0xfebfffff size: 0x06b00000 align: 26 PCI_DOMAIN: 0000 00 <- [0x0000001000 - 0x0000005fff] io PCI_DOMAIN: 0000 01 <- [0x00d0000000 - 0x00e87fffff] prefmem PCI_DOMAIN: 0000 02 <- [0x00f8000000 - 0x00feafffff] mem