- patches.suse/slab-handle-memoryless-nodes-v2a.patch: Refresh.
[linux-flexiantxendom0-3.2.10.git] / drivers / pci / hotplug / pciehp_ctrl.c
index 84487d1..d6ac1b2 100644 (file)
@@ -142,23 +142,9 @@ u8 pciehp_handle_power_fault(struct slot *p_slot)
 
        /* power fault */
        ctrl_dbg(ctrl, "Power fault interrupt received\n");
-
-       if (!pciehp_query_power_fault(p_slot)) {
-               /*
-                * power fault Cleared
-                */
-               ctrl_info(ctrl, "Power fault cleared on Slot(%s)\n",
-                         slot_name(p_slot));
-               event_type = INT_POWER_FAULT_CLEAR;
-       } else {
-               /*
-                *   power fault
-                */
-               ctrl_info(ctrl, "Power fault on Slot(%s)\n", slot_name(p_slot));
-               event_type = INT_POWER_FAULT;
-               ctrl_info(ctrl, "Power fault bit %x set\n", 0);
-       }
-
+       ctrl_err(ctrl, "Power fault on slot %s\n", slot_name(p_slot));
+       event_type = INT_POWER_FAULT;
+       ctrl_info(ctrl, "Power fault bit %x set\n", 0);
        queue_interrupt_event(p_slot, event_type);
 
        return 1;
@@ -224,13 +210,12 @@ static int board_added(struct slot *p_slot)
        retval = pciehp_check_link_status(ctrl);
        if (retval) {
                ctrl_err(ctrl, "Failed to check link status\n");
-               set_slot_off(ctrl, p_slot);
-               return retval;
+               goto err_exit;
        }
 
        /* Check for a power fault */
-       if (pciehp_query_power_fault(p_slot)) {
-               ctrl_dbg(ctrl, "Power fault detected\n");
+       if (ctrl->power_fault_detected || pciehp_query_power_fault(p_slot)) {
+               ctrl_err(ctrl, "Power fault on slot %s\n", slot_name(p_slot));
                retval = -EIO;
                goto err_exit;
        }
@@ -363,25 +348,6 @@ void pciehp_queue_pushbutton_work(struct work_struct *work)
        mutex_unlock(&p_slot->lock);
 }
 
-static int update_slot_info(struct slot *slot)
-{
-       struct hotplug_slot_info *info;
-       int result;
-
-       info = kmalloc(sizeof(*info), GFP_KERNEL);
-       if (!info)
-               return -ENOMEM;
-
-       pciehp_get_power_status(slot, &info->power_status);
-       pciehp_get_attention_status(slot, &info->attention_status);
-       pciehp_get_latch_status(slot, &info->latch_status);
-       pciehp_get_adapter_status(slot, &info->adapter_status);
-
-       result = pci_hp_change_slot_info(slot->hotplug_slot, info);
-       kfree (info);
-       return result;
-}
-
 /*
  * Note: This function must be called with slot->lock held
  */
@@ -442,7 +408,6 @@ static void handle_button_press_event(struct slot *p_slot)
                 * to hot-add or hot-remove is undergoing
                 */
                ctrl_info(ctrl, "Button ignore on Slot(%s)\n", slot_name(p_slot));
-               update_slot_info(p_slot);
                break;
        default:
                ctrl_warn(ctrl, "Not a valid state\n");
@@ -500,11 +465,9 @@ static void interrupt_event_handler(struct work_struct *work)
                if (!HP_SUPR_RM(ctrl))
                        break;
                ctrl_dbg(ctrl, "Surprise Removal\n");
-               update_slot_info(p_slot);
                handle_surprise_event(p_slot);
                break;
        default:
-               update_slot_info(p_slot);
                break;
        }
        mutex_unlock(&p_slot->lock);
@@ -547,9 +510,6 @@ int pciehp_enable_slot(struct slot *p_slot)
        if (rc) {
                pciehp_get_latch_status(p_slot, &getstatus);
        }
-
-       update_slot_info(p_slot);
-
        return rc;
 }
 
@@ -590,10 +550,7 @@ int pciehp_disable_slot(struct slot *p_slot)
                }
        }
 
-       ret = remove_board(p_slot);
-       update_slot_info(p_slot);
-
-       return ret;
+       return remove_board(p_slot);
 }
 
 int pciehp_sysfs_enable_slot(struct slot *p_slot)