Merge branch 'bjorn-start-stop-2.6.32' into release
This commit is contained in:
commit
3b87bb640e
5 changed files with 196 additions and 274 deletions
|
@ -53,7 +53,6 @@ MODULE_LICENSE("GPL");
|
|||
|
||||
static int acpi_memory_device_add(struct acpi_device *device);
|
||||
static int acpi_memory_device_remove(struct acpi_device *device, int type);
|
||||
static int acpi_memory_device_start(struct acpi_device *device);
|
||||
|
||||
static const struct acpi_device_id memory_device_ids[] = {
|
||||
{ACPI_MEMORY_DEVICE_HID, 0},
|
||||
|
@ -68,7 +67,6 @@ static struct acpi_driver acpi_memory_device_driver = {
|
|||
.ops = {
|
||||
.add = acpi_memory_device_add,
|
||||
.remove = acpi_memory_device_remove,
|
||||
.start = acpi_memory_device_start,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -431,6 +429,22 @@ static int acpi_memory_device_add(struct acpi_device *device)
|
|||
|
||||
printk(KERN_DEBUG "%s \n", acpi_device_name(device));
|
||||
|
||||
/*
|
||||
* Early boot code has recognized memory area by EFI/E820.
|
||||
* If DSDT shows these memory devices on boot, hotplug is not necessary
|
||||
* for them. So, it just returns until completion of this driver's
|
||||
* start up.
|
||||
*/
|
||||
if (!acpi_hotmem_initialized)
|
||||
return 0;
|
||||
|
||||
if (!acpi_memory_check_device(mem_device)) {
|
||||
/* call add_memory func */
|
||||
result = acpi_memory_enable_device(mem_device);
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX
|
||||
"Error in acpi_memory_enable_device\n");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -448,32 +462,6 @@ static int acpi_memory_device_remove(struct acpi_device *device, int type)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_memory_device_start (struct acpi_device *device)
|
||||
{
|
||||
struct acpi_memory_device *mem_device;
|
||||
int result = 0;
|
||||
|
||||
/*
|
||||
* Early boot code has recognized memory area by EFI/E820.
|
||||
* If DSDT shows these memory devices on boot, hotplug is not necessary
|
||||
* for them. So, it just returns until completion of this driver's
|
||||
* start up.
|
||||
*/
|
||||
if (!acpi_hotmem_initialized)
|
||||
return 0;
|
||||
|
||||
mem_device = acpi_driver_data(device);
|
||||
|
||||
if (!acpi_memory_check_device(mem_device)) {
|
||||
/* call add_memory func */
|
||||
result = acpi_memory_enable_device(mem_device);
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX
|
||||
"Error in acpi_memory_enable_device\n");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function to check for memory device
|
||||
*/
|
||||
|
|
|
@ -787,106 +787,6 @@ ec_parse_device(acpi_handle handle, u32 Level, void *context, void **retval)
|
|||
return AE_CTRL_TERMINATE;
|
||||
}
|
||||
|
||||
static void ec_remove_handlers(struct acpi_ec *ec)
|
||||
{
|
||||
if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
|
||||
ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
|
||||
pr_err(PREFIX "failed to remove space handler\n");
|
||||
if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
|
||||
&acpi_ec_gpe_handler)))
|
||||
pr_err(PREFIX "failed to remove gpe handler\n");
|
||||
clear_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
|
||||
}
|
||||
|
||||
static int acpi_ec_add(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_ec *ec = NULL;
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_EC_CLASS);
|
||||
|
||||
/* Check for boot EC */
|
||||
if (boot_ec &&
|
||||
(boot_ec->handle == device->handle ||
|
||||
boot_ec->handle == ACPI_ROOT_OBJECT)) {
|
||||
ec = boot_ec;
|
||||
boot_ec = NULL;
|
||||
} else {
|
||||
ec = make_acpi_ec();
|
||||
if (!ec)
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (ec_parse_device(device->handle, 0, ec, NULL) !=
|
||||
AE_CTRL_TERMINATE) {
|
||||
kfree(ec);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ec->handle = device->handle;
|
||||
|
||||
/* Find and register all query methods */
|
||||
acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1,
|
||||
acpi_ec_register_query_methods, ec, NULL);
|
||||
|
||||
if (!first_ec)
|
||||
first_ec = ec;
|
||||
device->driver_data = ec;
|
||||
acpi_ec_add_fs(device);
|
||||
pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
|
||||
ec->gpe, ec->command_addr, ec->data_addr);
|
||||
pr_info(PREFIX "driver started in %s mode\n",
|
||||
(test_bit(EC_FLAGS_GPE_MODE, &ec->flags))?"interrupt":"poll");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_ec_remove(struct acpi_device *device, int type)
|
||||
{
|
||||
struct acpi_ec *ec;
|
||||
struct acpi_ec_query_handler *handler, *tmp;
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
|
||||
ec = acpi_driver_data(device);
|
||||
mutex_lock(&ec->lock);
|
||||
list_for_each_entry_safe(handler, tmp, &ec->list, node) {
|
||||
list_del(&handler->node);
|
||||
kfree(handler);
|
||||
}
|
||||
mutex_unlock(&ec->lock);
|
||||
acpi_ec_remove_fs(device);
|
||||
device->driver_data = NULL;
|
||||
if (ec == first_ec)
|
||||
first_ec = NULL;
|
||||
kfree(ec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static acpi_status
|
||||
ec_parse_io_ports(struct acpi_resource *resource, void *context)
|
||||
{
|
||||
struct acpi_ec *ec = context;
|
||||
|
||||
if (resource->type != ACPI_RESOURCE_TYPE_IO)
|
||||
return AE_OK;
|
||||
|
||||
/*
|
||||
* The first address region returned is the data port, and
|
||||
* the second address region returned is the status/command
|
||||
* port.
|
||||
*/
|
||||
if (ec->data_addr == 0)
|
||||
ec->data_addr = resource->data.io.minimum;
|
||||
else if (ec->command_addr == 0)
|
||||
ec->command_addr = resource->data.io.minimum;
|
||||
else
|
||||
return AE_CTRL_TERMINATE;
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
static int ec_install_handlers(struct acpi_ec *ec)
|
||||
{
|
||||
acpi_status status;
|
||||
|
@ -923,18 +823,56 @@ static int ec_install_handlers(struct acpi_ec *ec)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_ec_start(struct acpi_device *device)
|
||||
static void ec_remove_handlers(struct acpi_ec *ec)
|
||||
{
|
||||
struct acpi_ec *ec;
|
||||
int ret = 0;
|
||||
if (ACPI_FAILURE(acpi_remove_address_space_handler(ec->handle,
|
||||
ACPI_ADR_SPACE_EC, &acpi_ec_space_handler)))
|
||||
pr_err(PREFIX "failed to remove space handler\n");
|
||||
if (ACPI_FAILURE(acpi_remove_gpe_handler(NULL, ec->gpe,
|
||||
&acpi_ec_gpe_handler)))
|
||||
pr_err(PREFIX "failed to remove gpe handler\n");
|
||||
clear_bit(EC_FLAGS_HANDLERS_INSTALLED, &ec->flags);
|
||||
}
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
static int acpi_ec_add(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_ec *ec = NULL;
|
||||
int ret;
|
||||
|
||||
ec = acpi_driver_data(device);
|
||||
strcpy(acpi_device_name(device), ACPI_EC_DEVICE_NAME);
|
||||
strcpy(acpi_device_class(device), ACPI_EC_CLASS);
|
||||
|
||||
if (!ec)
|
||||
return -EINVAL;
|
||||
/* Check for boot EC */
|
||||
if (boot_ec &&
|
||||
(boot_ec->handle == device->handle ||
|
||||
boot_ec->handle == ACPI_ROOT_OBJECT)) {
|
||||
ec = boot_ec;
|
||||
boot_ec = NULL;
|
||||
} else {
|
||||
ec = make_acpi_ec();
|
||||
if (!ec)
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (ec_parse_device(device->handle, 0, ec, NULL) !=
|
||||
AE_CTRL_TERMINATE) {
|
||||
kfree(ec);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ec->handle = device->handle;
|
||||
|
||||
/* Find and register all query methods */
|
||||
acpi_walk_namespace(ACPI_TYPE_METHOD, ec->handle, 1,
|
||||
acpi_ec_register_query_methods, ec, NULL);
|
||||
|
||||
if (!first_ec)
|
||||
first_ec = ec;
|
||||
device->driver_data = ec;
|
||||
acpi_ec_add_fs(device);
|
||||
pr_info(PREFIX "GPE = 0x%lx, I/O: command/status = 0x%lx, data = 0x%lx\n",
|
||||
ec->gpe, ec->command_addr, ec->data_addr);
|
||||
pr_info(PREFIX "driver started in %s mode\n",
|
||||
(test_bit(EC_FLAGS_GPE_MODE, &ec->flags))?"interrupt":"poll");
|
||||
|
||||
ret = ec_install_handlers(ec);
|
||||
|
||||
|
@ -943,19 +881,53 @@ static int acpi_ec_start(struct acpi_device *device)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int acpi_ec_stop(struct acpi_device *device, int type)
|
||||
static int acpi_ec_remove(struct acpi_device *device, int type)
|
||||
{
|
||||
struct acpi_ec *ec;
|
||||
struct acpi_ec_query_handler *handler, *tmp;
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
ec = acpi_driver_data(device);
|
||||
if (!ec)
|
||||
return -EINVAL;
|
||||
ec_remove_handlers(ec);
|
||||
|
||||
ec = acpi_driver_data(device);
|
||||
ec_remove_handlers(ec);
|
||||
mutex_lock(&ec->lock);
|
||||
list_for_each_entry_safe(handler, tmp, &ec->list, node) {
|
||||
list_del(&handler->node);
|
||||
kfree(handler);
|
||||
}
|
||||
mutex_unlock(&ec->lock);
|
||||
acpi_ec_remove_fs(device);
|
||||
device->driver_data = NULL;
|
||||
if (ec == first_ec)
|
||||
first_ec = NULL;
|
||||
kfree(ec);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static acpi_status
|
||||
ec_parse_io_ports(struct acpi_resource *resource, void *context)
|
||||
{
|
||||
struct acpi_ec *ec = context;
|
||||
|
||||
if (resource->type != ACPI_RESOURCE_TYPE_IO)
|
||||
return AE_OK;
|
||||
|
||||
/*
|
||||
* The first address region returned is the data port, and
|
||||
* the second address region returned is the status/command
|
||||
* port.
|
||||
*/
|
||||
if (ec->data_addr == 0)
|
||||
ec->data_addr = resource->data.io.minimum;
|
||||
else if (ec->command_addr == 0)
|
||||
ec->command_addr = resource->data.io.minimum;
|
||||
else
|
||||
return AE_CTRL_TERMINATE;
|
||||
|
||||
return AE_OK;
|
||||
}
|
||||
|
||||
int __init acpi_boot_ec_enable(void)
|
||||
{
|
||||
if (!boot_ec || test_bit(EC_FLAGS_HANDLERS_INSTALLED, &boot_ec->flags))
|
||||
|
@ -1076,8 +1048,6 @@ static struct acpi_driver acpi_ec_driver = {
|
|||
.ops = {
|
||||
.add = acpi_ec_add,
|
||||
.remove = acpi_ec_remove,
|
||||
.start = acpi_ec_start,
|
||||
.stop = acpi_ec_stop,
|
||||
.suspend = acpi_ec_suspend,
|
||||
.resume = acpi_ec_resume,
|
||||
},
|
||||
|
|
|
@ -81,7 +81,6 @@ MODULE_DESCRIPTION("ACPI Processor Driver");
|
|||
MODULE_LICENSE("GPL");
|
||||
|
||||
static int acpi_processor_add(struct acpi_device *device);
|
||||
static int acpi_processor_start(struct acpi_device *device);
|
||||
static int acpi_processor_remove(struct acpi_device *device, int type);
|
||||
static int acpi_processor_info_open_fs(struct inode *inode, struct file *file);
|
||||
static void acpi_processor_notify(struct acpi_device *device, u32 event);
|
||||
|
@ -103,7 +102,6 @@ static struct acpi_driver acpi_processor_driver = {
|
|||
.ops = {
|
||||
.add = acpi_processor_add,
|
||||
.remove = acpi_processor_remove,
|
||||
.start = acpi_processor_start,
|
||||
.suspend = acpi_processor_suspend,
|
||||
.resume = acpi_processor_resume,
|
||||
.notify = acpi_processor_notify,
|
||||
|
@ -700,92 +698,6 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||
|
||||
static DEFINE_PER_CPU(void *, processor_device_array);
|
||||
|
||||
static int __cpuinit acpi_processor_start(struct acpi_device *device)
|
||||
{
|
||||
int result = 0;
|
||||
struct acpi_processor *pr;
|
||||
struct sys_device *sysdev;
|
||||
|
||||
pr = acpi_driver_data(device);
|
||||
|
||||
result = acpi_processor_get_info(device);
|
||||
if (result) {
|
||||
/* Processor is physically not present */
|
||||
return 0;
|
||||
}
|
||||
|
||||
BUG_ON((pr->id >= nr_cpu_ids) || (pr->id < 0));
|
||||
|
||||
/*
|
||||
* Buggy BIOS check
|
||||
* ACPI id of processors can be reported wrongly by the BIOS.
|
||||
* Don't trust it blindly
|
||||
*/
|
||||
if (per_cpu(processor_device_array, pr->id) != NULL &&
|
||||
per_cpu(processor_device_array, pr->id) != device) {
|
||||
printk(KERN_WARNING "BIOS reported wrong ACPI id "
|
||||
"for the processor\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
per_cpu(processor_device_array, pr->id) = device;
|
||||
|
||||
per_cpu(processors, pr->id) = pr;
|
||||
|
||||
result = acpi_processor_add_fs(device);
|
||||
if (result)
|
||||
goto end;
|
||||
|
||||
sysdev = get_cpu_sysdev(pr->id);
|
||||
if (sysfs_create_link(&device->dev.kobj, &sysdev->kobj, "sysdev"))
|
||||
return -EFAULT;
|
||||
|
||||
/* _PDC call should be done before doing anything else (if reqd.). */
|
||||
arch_acpi_processor_init_pdc(pr);
|
||||
acpi_processor_set_pdc(pr);
|
||||
arch_acpi_processor_cleanup_pdc(pr);
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
acpi_processor_ppc_has_changed(pr);
|
||||
#endif
|
||||
acpi_processor_get_throttling_info(pr);
|
||||
acpi_processor_get_limit_info(pr);
|
||||
|
||||
|
||||
acpi_processor_power_init(pr, device);
|
||||
|
||||
pr->cdev = thermal_cooling_device_register("Processor", device,
|
||||
&processor_cooling_ops);
|
||||
if (IS_ERR(pr->cdev)) {
|
||||
result = PTR_ERR(pr->cdev);
|
||||
goto end;
|
||||
}
|
||||
|
||||
dev_info(&device->dev, "registered as cooling_device%d\n",
|
||||
pr->cdev->id);
|
||||
|
||||
result = sysfs_create_link(&device->dev.kobj,
|
||||
&pr->cdev->device.kobj,
|
||||
"thermal_cooling");
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
result = sysfs_create_link(&pr->cdev->device.kobj,
|
||||
&device->dev.kobj,
|
||||
"device");
|
||||
if (result)
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
|
||||
if (pr->flags.throttling) {
|
||||
printk(KERN_INFO PREFIX "%s [%s] (supports",
|
||||
acpi_device_name(device), acpi_device_bid(device));
|
||||
printk(" %d throttling states", pr->throttling.state_count);
|
||||
printk(")\n");
|
||||
}
|
||||
|
||||
end:
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void acpi_processor_notify(struct acpi_device *device, u32 event)
|
||||
{
|
||||
struct acpi_processor *pr = acpi_driver_data(device);
|
||||
|
@ -848,10 +760,8 @@ static struct notifier_block acpi_cpu_notifier =
|
|||
static int acpi_processor_add(struct acpi_device *device)
|
||||
{
|
||||
struct acpi_processor *pr = NULL;
|
||||
|
||||
|
||||
if (!device)
|
||||
return -EINVAL;
|
||||
int result = 0;
|
||||
struct sys_device *sysdev;
|
||||
|
||||
pr = kzalloc(sizeof(struct acpi_processor), GFP_KERNEL);
|
||||
if (!pr)
|
||||
|
@ -867,7 +777,100 @@ static int acpi_processor_add(struct acpi_device *device)
|
|||
strcpy(acpi_device_class(device), ACPI_PROCESSOR_CLASS);
|
||||
device->driver_data = pr;
|
||||
|
||||
result = acpi_processor_get_info(device);
|
||||
if (result) {
|
||||
/* Processor is physically not present */
|
||||
return 0;
|
||||
}
|
||||
|
||||
BUG_ON((pr->id >= nr_cpu_ids) || (pr->id < 0));
|
||||
|
||||
/*
|
||||
* Buggy BIOS check
|
||||
* ACPI id of processors can be reported wrongly by the BIOS.
|
||||
* Don't trust it blindly
|
||||
*/
|
||||
if (per_cpu(processor_device_array, pr->id) != NULL &&
|
||||
per_cpu(processor_device_array, pr->id) != device) {
|
||||
printk(KERN_WARNING "BIOS reported wrong ACPI id "
|
||||
"for the processor\n");
|
||||
result = -ENODEV;
|
||||
goto err_free_cpumask;
|
||||
}
|
||||
per_cpu(processor_device_array, pr->id) = device;
|
||||
|
||||
per_cpu(processors, pr->id) = pr;
|
||||
|
||||
result = acpi_processor_add_fs(device);
|
||||
if (result)
|
||||
goto err_free_cpumask;
|
||||
|
||||
sysdev = get_cpu_sysdev(pr->id);
|
||||
if (sysfs_create_link(&device->dev.kobj, &sysdev->kobj, "sysdev")) {
|
||||
result = -EFAULT;
|
||||
goto err_remove_fs;
|
||||
}
|
||||
|
||||
/* _PDC call should be done before doing anything else (if reqd.). */
|
||||
arch_acpi_processor_init_pdc(pr);
|
||||
acpi_processor_set_pdc(pr);
|
||||
arch_acpi_processor_cleanup_pdc(pr);
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
acpi_processor_ppc_has_changed(pr);
|
||||
#endif
|
||||
acpi_processor_get_throttling_info(pr);
|
||||
acpi_processor_get_limit_info(pr);
|
||||
|
||||
|
||||
acpi_processor_power_init(pr, device);
|
||||
|
||||
pr->cdev = thermal_cooling_device_register("Processor", device,
|
||||
&processor_cooling_ops);
|
||||
if (IS_ERR(pr->cdev)) {
|
||||
result = PTR_ERR(pr->cdev);
|
||||
goto err_power_exit;
|
||||
}
|
||||
|
||||
dev_info(&device->dev, "registered as cooling_device%d\n",
|
||||
pr->cdev->id);
|
||||
|
||||
result = sysfs_create_link(&device->dev.kobj,
|
||||
&pr->cdev->device.kobj,
|
||||
"thermal_cooling");
|
||||
if (result) {
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
goto err_thermal_unregister;
|
||||
}
|
||||
result = sysfs_create_link(&pr->cdev->device.kobj,
|
||||
&device->dev.kobj,
|
||||
"device");
|
||||
if (result) {
|
||||
printk(KERN_ERR PREFIX "Create sysfs link\n");
|
||||
goto err_remove_sysfs;
|
||||
}
|
||||
|
||||
if (pr->flags.throttling) {
|
||||
printk(KERN_INFO PREFIX "%s [%s] (supports",
|
||||
acpi_device_name(device), acpi_device_bid(device));
|
||||
printk(" %d throttling states", pr->throttling.state_count);
|
||||
printk(")\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_remove_sysfs:
|
||||
sysfs_remove_link(&device->dev.kobj, "thermal_cooling");
|
||||
err_thermal_unregister:
|
||||
thermal_cooling_device_unregister(pr->cdev);
|
||||
err_power_exit:
|
||||
acpi_processor_power_exit(pr, device);
|
||||
err_remove_fs:
|
||||
acpi_processor_remove_fs(device);
|
||||
err_free_cpumask:
|
||||
free_cpumask_var(pr->throttling.shared_cpu_map);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int acpi_processor_remove(struct acpi_device *device, int type)
|
||||
|
@ -944,7 +947,6 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
|
|||
{
|
||||
acpi_handle phandle;
|
||||
struct acpi_device *pdev;
|
||||
struct acpi_processor *pr;
|
||||
|
||||
|
||||
if (acpi_get_parent(handle, &phandle)) {
|
||||
|
@ -959,15 +961,6 @@ int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
acpi_bus_start(*device);
|
||||
|
||||
pr = acpi_driver_data(*device);
|
||||
if (!pr)
|
||||
return -ENODEV;
|
||||
|
||||
if ((pr->id >= 0) && (pr->id < nr_cpu_ids)) {
|
||||
kobject_uevent(&(*device)->dev.kobj, KOBJ_ONLINE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -997,25 +990,6 @@ static void __ref acpi_processor_hotplug_notify(acpi_handle handle,
|
|||
"Unable to add the device\n");
|
||||
break;
|
||||
}
|
||||
|
||||
pr = acpi_driver_data(device);
|
||||
if (!pr) {
|
||||
printk(KERN_ERR PREFIX "Driver data is NULL\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (pr->id >= 0 && (pr->id < nr_cpu_ids)) {
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||
break;
|
||||
}
|
||||
|
||||
result = acpi_processor_start(device);
|
||||
if ((!result) && ((pr->id >= 0) && (pr->id < nr_cpu_ids))) {
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_ONLINE);
|
||||
} else {
|
||||
printk(KERN_ERR PREFIX "Device [%s] failed to start\n",
|
||||
acpi_device_bid(device));
|
||||
}
|
||||
break;
|
||||
case ACPI_NOTIFY_EJECT_REQUEST:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
|
@ -1032,9 +1006,6 @@ static void __ref acpi_processor_hotplug_notify(acpi_handle handle,
|
|||
"Driver data is NULL, dropping EJECT\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((pr->id < nr_cpu_ids) && (cpu_present(pr->id)))
|
||||
kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE);
|
||||
break;
|
||||
default:
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
|
|
|
@ -430,9 +430,6 @@ static int acpi_device_probe(struct device * dev)
|
|||
if (acpi_drv->ops.notify) {
|
||||
ret = acpi_device_install_notify_handler(acpi_dev);
|
||||
if (ret) {
|
||||
if (acpi_drv->ops.stop)
|
||||
acpi_drv->ops.stop(acpi_dev,
|
||||
acpi_dev->removal_type);
|
||||
if (acpi_drv->ops.remove)
|
||||
acpi_drv->ops.remove(acpi_dev,
|
||||
acpi_dev->removal_type);
|
||||
|
@ -456,8 +453,6 @@ static int acpi_device_remove(struct device * dev)
|
|||
if (acpi_drv) {
|
||||
if (acpi_drv->ops.notify)
|
||||
acpi_device_remove_notify_handler(acpi_dev);
|
||||
if (acpi_drv->ops.stop)
|
||||
acpi_drv->ops.stop(acpi_dev, acpi_dev->removal_type);
|
||||
if (acpi_drv->ops.remove)
|
||||
acpi_drv->ops.remove(acpi_dev, acpi_dev->removal_type);
|
||||
}
|
||||
|
|
|
@ -87,7 +87,6 @@ struct acpi_device;
|
|||
typedef int (*acpi_op_add) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
|
||||
typedef int (*acpi_op_start) (struct acpi_device * device);
|
||||
typedef int (*acpi_op_stop) (struct acpi_device * device, int type);
|
||||
typedef int (*acpi_op_suspend) (struct acpi_device * device,
|
||||
pm_message_t state);
|
||||
typedef int (*acpi_op_resume) (struct acpi_device * device);
|
||||
|
@ -104,7 +103,6 @@ struct acpi_device_ops {
|
|||
acpi_op_add add;
|
||||
acpi_op_remove remove;
|
||||
acpi_op_start start;
|
||||
acpi_op_stop stop;
|
||||
acpi_op_suspend suspend;
|
||||
acpi_op_resume resume;
|
||||
acpi_op_bind bind;
|
||||
|
|
Loading…
Reference in a new issue