Commit 77ddc744 authored by John Rose's avatar John Rose Committed by Deepak Saxena

[PATCH] PCI Hotplug: RPA DLPAR remove slot, return code fix

parent b59f07cf
...@@ -47,15 +47,13 @@ static struct device_node *find_php_slot_vio_node(char *drc_name) ...@@ -47,15 +47,13 @@ static struct device_node *find_php_slot_vio_node(char *drc_name)
{ {
struct device_node *child; struct device_node *child;
struct device_node *parent = of_find_node_by_name(NULL, "vdevice"); struct device_node *parent = of_find_node_by_name(NULL, "vdevice");
char *loc_code;
if (!parent) if (!parent)
return NULL; return NULL;
for (child = of_get_next_child(parent, NULL); for (child = of_get_next_child(parent, NULL);
child; child = of_get_next_child(parent, child)) { child; child = of_get_next_child(parent, child)) {
char *loc_code;
loc_code = get_property(child, "ibm,loc-code", NULL); loc_code = get_property(child, "ibm,loc-code", NULL);
if (loc_code && !strcmp(loc_code, drc_name)) if (loc_code && !strcmp(loc_code, drc_name))
return child; return child;
...@@ -309,12 +307,8 @@ int dlpar_remove_vio_slot(struct slot *slot, char *drc_name) ...@@ -309,12 +307,8 @@ int dlpar_remove_vio_slot(struct slot *slot, char *drc_name)
*/ */
int dlpar_remove_pci_slot(struct slot *slot, char *drc_name) int dlpar_remove_pci_slot(struct slot *slot, char *drc_name)
{ {
struct device_node *dn = find_php_slot_pci_node(drc_name);
struct pci_dev *bridge_dev; struct pci_dev *bridge_dev;
if (!dn)
return -ENODEV;
bridge_dev = slot->bridge; bridge_dev = slot->bridge;
if (!bridge_dev) { if (!bridge_dev) {
printk(KERN_ERR "%s: unexpected null bridge device\n", printk(KERN_ERR "%s: unexpected null bridge device\n",
...@@ -358,13 +352,19 @@ int dlpar_remove_slot(char *drc_name) ...@@ -358,13 +352,19 @@ int dlpar_remove_slot(char *drc_name)
if (down_interruptible(&rpadlpar_sem)) if (down_interruptible(&rpadlpar_sem))
return -ERESTARTSYS; return -ERESTARTSYS;
if (!find_php_slot_vio_node(drc_name) &&
!find_php_slot_pci_node(drc_name)) {
rc = -ENODEV;
goto exit;
}
slot = find_slot(drc_name); slot = find_slot(drc_name);
if (!slot) { if (!slot) {
rc = -EINVAL; rc = -EINVAL;
goto exit; goto exit;
} }
switch (slot->dev_type) { switch (slot->dev_type) {
case PCI_DEV: case PCI_DEV:
rc = dlpar_remove_pci_slot(slot, drc_name); rc = dlpar_remove_pci_slot(slot, drc_name);
......
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