|
@@ -154,7 +154,8 @@ static union apci_descriptor *ibm_slot_from_id(int id)
|
|
|
ibm_slot_done:
|
|
|
if (ret) {
|
|
|
ret = kmalloc(sizeof(union apci_descriptor), GFP_KERNEL);
|
|
|
- memcpy(ret, des, sizeof(union apci_descriptor));
|
|
|
+ if (ret)
|
|
|
+ memcpy(ret, des, sizeof(union apci_descriptor));
|
|
|
}
|
|
|
kfree(table);
|
|
|
return ret;
|
|
@@ -175,8 +176,13 @@ static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
|
|
|
acpi_status stat;
|
|
|
unsigned long long rc;
|
|
|
union apci_descriptor *ibm_slot;
|
|
|
+ int id = hpslot_to_sun(slot);
|
|
|
|
|
|
- ibm_slot = ibm_slot_from_id(hpslot_to_sun(slot));
|
|
|
+ ibm_slot = ibm_slot_from_id(id);
|
|
|
+ if (!ibm_slot) {
|
|
|
+ pr_err("APLS null ACPI descriptor for slot %d\n", id);
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
|
|
|
pr_debug("%s: set slot %d (%d) attention status to %d\n", __func__,
|
|
|
ibm_slot->slot.slot_num, ibm_slot->slot.slot_id,
|
|
@@ -215,8 +221,13 @@ static int ibm_set_attention_status(struct hotplug_slot *slot, u8 status)
|
|
|
static int ibm_get_attention_status(struct hotplug_slot *slot, u8 *status)
|
|
|
{
|
|
|
union apci_descriptor *ibm_slot;
|
|
|
+ int id = hpslot_to_sun(slot);
|
|
|
|
|
|
- ibm_slot = ibm_slot_from_id(hpslot_to_sun(slot));
|
|
|
+ ibm_slot = ibm_slot_from_id(id);
|
|
|
+ if (!ibm_slot) {
|
|
|
+ pr_err("APLS null ACPI descriptor for slot %d\n", id);
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
|
|
|
if (ibm_slot->slot.attn & 0xa0 || ibm_slot->slot.status[1] & 0x08)
|
|
|
*status = 1;
|