ACPI: acpi_bus_{scan,bus,add}: return -ENODEV if no device was found
Callers (acpi_memhotplug.c, dock.c and others) check for the return value of acpi_bus_add() and assume a valid device was returned in case zero was returned. Thus return -ENODEV if no device was found in acpi_bus_scan and propagate this through acpi_bus_add and acpi_bus_start. Also remove a confusing comment in acpiphp_glue.c, acpi_bus_scan will and cannot invoke if acpi_bus_add returns no valid device. Signed-off-by: Thomas Renninger <trenn@suse.de> Acked-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
committed by
Len Brown
parent
d2f6650a95
commit
7779688fc3
@@ -1336,9 +1336,25 @@ static int acpi_bus_scan(acpi_handle handle, struct acpi_bus_ops *ops,
|
|||||||
|
|
||||||
if (child)
|
if (child)
|
||||||
*child = device;
|
*child = device;
|
||||||
|
|
||||||
|
if (device)
|
||||||
return 0;
|
return 0;
|
||||||
|
else
|
||||||
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* acpi_bus_add and acpi_bus_start
|
||||||
|
*
|
||||||
|
* scan a given ACPI tree and (probably recently hot-plugged)
|
||||||
|
* create and add or starts found devices.
|
||||||
|
*
|
||||||
|
* If no devices were found -ENODEV is returned which does not
|
||||||
|
* mean that this is a real error, there just have been no suitable
|
||||||
|
* ACPI objects in the table trunk from which the kernel could create
|
||||||
|
* a device and add/start an appropriate driver.
|
||||||
|
*/
|
||||||
|
|
||||||
int
|
int
|
||||||
acpi_bus_add(struct acpi_device **child,
|
acpi_bus_add(struct acpi_device **child,
|
||||||
struct acpi_device *parent, acpi_handle handle, int type)
|
struct acpi_device *parent, acpi_handle handle, int type)
|
||||||
@@ -1348,8 +1364,7 @@ acpi_bus_add(struct acpi_device **child,
|
|||||||
memset(&ops, 0, sizeof(ops));
|
memset(&ops, 0, sizeof(ops));
|
||||||
ops.acpi_op_add = 1;
|
ops.acpi_op_add = 1;
|
||||||
|
|
||||||
acpi_bus_scan(handle, &ops, child);
|
return acpi_bus_scan(handle, &ops, child);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(acpi_bus_add);
|
EXPORT_SYMBOL(acpi_bus_add);
|
||||||
|
|
||||||
@@ -1363,8 +1378,7 @@ int acpi_bus_start(struct acpi_device *device)
|
|||||||
memset(&ops, 0, sizeof(ops));
|
memset(&ops, 0, sizeof(ops));
|
||||||
ops.acpi_op_start = 1;
|
ops.acpi_op_start = 1;
|
||||||
|
|
||||||
acpi_bus_scan(device->handle, &ops, NULL);
|
return acpi_bus_scan(device->handle, &ops, NULL);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(acpi_bus_start);
|
EXPORT_SYMBOL(acpi_bus_start);
|
||||||
|
|
||||||
|
@@ -720,12 +720,6 @@ static int acpiphp_bus_add(struct acpiphp_func *func)
|
|||||||
-ret_val);
|
-ret_val);
|
||||||
goto acpiphp_bus_add_out;
|
goto acpiphp_bus_add_out;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* try to start anyway. We could have failed to add
|
|
||||||
* simply because this bus had previously been added
|
|
||||||
* on another add. Don't bother with the return value
|
|
||||||
* we just keep going.
|
|
||||||
*/
|
|
||||||
ret_val = acpi_bus_start(device);
|
ret_val = acpi_bus_start(device);
|
||||||
|
|
||||||
acpiphp_bus_add_out:
|
acpiphp_bus_add_out:
|
||||||
|
Reference in New Issue
Block a user