[PATCH] PCI Hotplug ibmphp_pci.c: Fix masking out needed information too early
authorRolf Eike Beer <eike-hotplug@sf-tec.de>
Mon, 11 Apr 2005 13:01:54 +0000 (15:01 +0200)
committerGreg KH <gregkh@suse.de>
Wed, 4 May 2005 06:45:15 +0000 (23:45 -0700)
here is the patch that fixes the bug introduced by my previous patch which
already went into 2.6.12-rc2 and is likely to cause trouble is someone hits
one the else case here by accident.

Using the &= operation before the if statement destroys the information the
if asks for so we always go into the else branch.

Signed-off-by: Rolf Eike Beer <eike-hotplug@sf-tec.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/pci/hotplug/ibmphp_pci.c

index 2335fac..8122fe7 100644 (file)
@@ -1308,10 +1308,10 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
                        /* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
                } else {
                        /* This is Memory */
-                       start_address &= PCI_BASE_ADDRESS_MEM_MASK;
                        if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
                                /* pfmem */
                                debug ("start address of pfmem is %x\n", start_address);
+                               start_address &= PCI_BASE_ADDRESS_MEM_MASK;
 
                                if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
                                        err ("cannot find corresponding PFMEM resource to remove\n");
@@ -1325,6 +1325,8 @@ static int unconfigure_boot_device (u8 busno, u8 device, u8 function)
                        } else {
                                /* regular memory */
                                debug ("start address of mem is %x\n", start_address);
+                               start_address &= PCI_BASE_ADDRESS_MEM_MASK;
+
                                if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
                                        err ("cannot find corresponding MEM resource to remove\n");
                                        return -EIO;
@@ -1422,9 +1424,9 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
                        /* ????????? DO WE NEED TO WRITE ANYTHING INTO THE PCI CONFIG SPACE BACK ?????????? */
                } else {
                        /* This is Memory */
-                       start_address &= PCI_BASE_ADDRESS_MEM_MASK;
                        if (start_address & PCI_BASE_ADDRESS_MEM_PREFETCH) {
                                /* pfmem */
+                               start_address &= PCI_BASE_ADDRESS_MEM_MASK;
                                if (ibmphp_find_resource (bus, start_address, &pfmem, PFMEM) < 0) {
                                        err ("cannot find corresponding PFMEM resource to remove\n");
                                        return -EINVAL;
@@ -1436,6 +1438,7 @@ static int unconfigure_boot_bridge (u8 busno, u8 device, u8 function)
                                }
                        } else {
                                /* regular memory */
+                               start_address &= PCI_BASE_ADDRESS_MEM_MASK;
                                if (ibmphp_find_resource (bus, start_address, &mem, MEM) < 0) {
                                        err ("cannot find corresponding MEM resource to remove\n");
                                        return -EINVAL;