diff -urNp linux-2.4.21/drivers/hotplug/acpiphp_pci.c linux-2.4.21.SUSE/drivers/hotplug/acpiphp_pci.c --- linux-2.4.21/drivers/hotplug/acpiphp_pci.c 2004-04-02 16:49:05.000000000 +0200 +++ linux-2.4.21.SUSE/drivers/hotplug/acpiphp_pci.c 2004-04-02 16:50:32.000000000 +0200 @@ -78,8 +78,8 @@ static int init_config_space (struct acp if (bar & PCI_BASE_ADDRESS_SPACE_IO) { /* This is IO */ - len = bar & 0xFFFFFFFC; - len = ~len + 1; + len = bar & (PCI_BASE_ADDRESS_IO_MASK & 0xFFFF); + len = len & ~(len-1); dbg("len in IO %x, BAR %d\n", len, count); @@ -340,8 +340,9 @@ static int detect_used_resource (struct if (len & PCI_BASE_ADDRESS_SPACE_IO) { /* This is IO */ base = bar & 0xFFFFFFFC; - len &= 0xFFFFFFFC; - len = ~len + 1; + + len = len & (PCI_BASE_ADDRESS_IO_MASK & 0xFFFF); + len = len & ~(len-1); dbg("BAR[%d] %08x - %08x (IO)\n", count, (u32)base, (u32)base + len - 1); @@ -465,8 +466,9 @@ int acpiphp_init_func_resource (struct a if (len & PCI_BASE_ADDRESS_SPACE_IO) { /* This is IO */ base = bar & 0xFFFFFFFC; - len &= 0xFFFFFFFC; - len = ~len + 1; + + len = len & (PCI_BASE_ADDRESS_IO_MASK & 0xFFFF); + len = len & ~(len-1); dbg("BAR[%d] %08x - %08x (IO)\n", count, (u32)base, (u32)base + len - 1); diff -urNp linux-2.4.21/drivers/hotplug/acpiphp_res.c linux-2.4.21.SUSE/drivers/hotplug/acpiphp_res.c --- linux-2.4.21/drivers/hotplug/acpiphp_res.c 2004-04-02 16:49:05.000000000 +0200 +++ linux-2.4.21.SUSE/drivers/hotplug/acpiphp_res.c 2004-04-02 16:50:32.000000000 +0200 @@ -225,7 +225,7 @@ struct pci_resource *acpiphp_get_io_reso } /* End of too big on top end */ /* For IO make sure it's not in the ISA aliasing space */ - if (node->base & 0x300L) + if ((node->base & 0x300L) && !(node->base & 0xfffff000)) continue; /* If we got here, then it is the right size