Commit 3d20b932 authored by Len Brown's avatar Len Brown

Merge intel.com:/home/lenb/src/26-stable-dev

into intel.com:/home/lenb/src/26-latest-dev
parents d977939f fe96cc43
...@@ -161,6 +161,7 @@ struct acpi_thermal { ...@@ -161,6 +161,7 @@ struct acpi_thermal {
unsigned long last_temperature; unsigned long last_temperature;
unsigned long polling_frequency; unsigned long polling_frequency;
u8 cooling_mode; u8 cooling_mode;
volatile u8 zombie;
struct acpi_thermal_flags flags; struct acpi_thermal_flags flags;
struct acpi_thermal_state state; struct acpi_thermal_state state;
struct acpi_thermal_trips trips; struct acpi_thermal_trips trips;
...@@ -647,7 +648,10 @@ static void ...@@ -647,7 +648,10 @@ static void
acpi_thermal_run ( acpi_thermal_run (
unsigned long data) unsigned long data)
{ {
acpi_os_queue_for_execution(OSD_PRIORITY_GPE, acpi_thermal_check, (void *) data); struct acpi_thermal *tz = (struct acpi_thermal *)data;
if (!tz->zombie)
acpi_os_queue_for_execution(OSD_PRIORITY_GPE,
acpi_thermal_check, (void *) data);
} }
...@@ -1351,8 +1355,14 @@ acpi_thermal_remove ( ...@@ -1351,8 +1355,14 @@ acpi_thermal_remove (
tz = (struct acpi_thermal *) acpi_driver_data(device); tz = (struct acpi_thermal *) acpi_driver_data(device);
if (timer_pending(&(tz->timer))) /* avoid timer adding new defer task */
del_timer(&(tz->timer)); tz->zombie = 1;
/* wait for running timer (on other CPUs) finish */
del_timer_sync(&(tz->timer));
/* synchronize deferred task */
acpi_os_wait_events_complete(NULL);
/* deferred task may reinsert timer */
del_timer_sync(&(tz->timer));
status = acpi_remove_notify_handler(tz->handle, status = acpi_remove_notify_handler(tz->handle,
ACPI_DEVICE_NOTIFY, acpi_thermal_notify); ACPI_DEVICE_NOTIFY, acpi_thermal_notify);
...@@ -1374,6 +1384,7 @@ acpi_thermal_remove ( ...@@ -1374,6 +1384,7 @@ acpi_thermal_remove (
acpi_thermal_remove_fs(device); acpi_thermal_remove_fs(device);
kfree(tz);
return_VALUE(0); return_VALUE(0);
} }
......
...@@ -286,8 +286,10 @@ __setup("quiet", quiet_kernel); ...@@ -286,8 +286,10 @@ __setup("quiet", quiet_kernel);
static int __init unknown_bootoption(char *param, char *val) static int __init unknown_bootoption(char *param, char *val)
{ {
/* Change NUL term back to "=", to make "param" the whole string. */ /* Change NUL term back to "=", to make "param" the whole string. */
if (val) if (val) {
val[-1] = '='; if (val[-1] == '"') val[-2] = '=';
else val[-1] = '=';
}
/* Handle obsolete-style parameters */ /* Handle obsolete-style parameters */
if (obsolete_checksetup(param)) if (obsolete_checksetup(param))
......
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