Doing it this way is better: first assign align value to be at least of min_align then compare align with bridge->align to see if bridge->align needs updated. ... ... while((dev = largest_resource(bus, &resource, type_mask, type))) { resource_t size; /* Do NOT I repeat do not ignore resources which have zero size. * If they need to be ignored dev->read_resources should not even * return them. Some resources must be set even when they have * no size. PCI bridge resources are a good example of this. */ /* Make certain we are dealing with a good minimum size */ size = resource->size; align = resource->align; if (align < min_align) { align = min_align; }
/* Propogate the resource alignment to the bridge register */ if (align > bridge->align) { bridge->align = align; } if (resource->flags & IORESOURCE_FIXED) { continue; }
... ...
I noticed this problem, if certian devices are disabled (like onboard vga for example). The other enabled devices try to use 0xfec00000 for memory allocation, causing APIC to fail. I think the above code looks good :-) Have you done up a patch?