|
@@ -1300,7 +1300,7 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
|
|
*/
|
|
*/
|
|
static void __init register_memory(void)
|
|
static void __init register_memory(void)
|
|
{
|
|
{
|
|
- unsigned long gapstart, gapsize;
|
|
|
|
|
|
+ unsigned long gapstart, gapsize, round;
|
|
unsigned long long last;
|
|
unsigned long long last;
|
|
int i;
|
|
int i;
|
|
|
|
|
|
@@ -1345,14 +1345,14 @@ static void __init register_memory(void)
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Start allocating dynamic PCI memory a bit into the gap,
|
|
|
|
- * aligned up to the nearest megabyte.
|
|
|
|
- *
|
|
|
|
- * Question: should we try to pad it up a bit (do something
|
|
|
|
- * like " + (gapsize >> 3)" in there too?). We now have the
|
|
|
|
- * technology.
|
|
|
|
|
|
+ * See how much we want to round up: start off with
|
|
|
|
+ * rounding to the next 1MB area.
|
|
*/
|
|
*/
|
|
- pci_mem_start = (gapstart + 0xfffff) & ~0xfffff;
|
|
|
|
|
|
+ round = 0x100000;
|
|
|
|
+ while ((gapsize >> 4) > round)
|
|
|
|
+ round += round;
|
|
|
|
+ /* Fun with two's complement */
|
|
|
|
+ pci_mem_start = (gapstart + round) & -round;
|
|
|
|
|
|
printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n",
|
|
printk("Allocating PCI resources starting at %08lx (gap: %08lx:%08lx)\n",
|
|
pci_mem_start, gapstart, gapsize);
|
|
pci_mem_start, gapstart, gapsize);
|