Commit be1611e0 authored by Frederic Barrat's avatar Frederic Barrat Committed by Michael Ellerman

pci/hotplug/pnv-php: Relax check when disabling slot

The driver only allows to disable a slot in the POPULATED
state. However, if an error occurs while enabling the slot, say
because the link couldn't be trained, then the POPULATED state may not
be reached, yet the power state of the slot is on. So allow to disable
a slot in the REGISTERED state. Removing the devices will do nothing
since it's not populated, and we'll set the power state of the slot
back to off.
Reviewed-by: default avatarAlastair D'Silva <alastair@d-silva.org>
Reviewed-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20191121134918.7155-10-fbarrat@linux.ibm.com
parent ea53919b
...@@ -566,7 +566,13 @@ static int pnv_php_disable_slot(struct hotplug_slot *slot) ...@@ -566,7 +566,13 @@ static int pnv_php_disable_slot(struct hotplug_slot *slot)
struct pnv_php_slot *php_slot = to_pnv_php_slot(slot); struct pnv_php_slot *php_slot = to_pnv_php_slot(slot);
int ret; int ret;
if (php_slot->state != PNV_PHP_STATE_POPULATED) /*
* Allow to disable a slot already in the registered state to
* cover cases where the slot couldn't be enabled and never
* reached the populated state
*/
if (php_slot->state != PNV_PHP_STATE_POPULATED &&
php_slot->state != PNV_PHP_STATE_REGISTERED)
return 0; return 0;
/* Remove all devices behind the slot */ /* Remove all devices behind the slot */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment