|
@@ -117,6 +117,12 @@ IBM_BIOS_MODULE_ALIAS("K[U,X-Z]");
|
|
|
|
|
|
#define __unused __attribute__ ((unused))
|
|
|
|
|
|
+static enum {
|
|
|
+ TPACPI_LIFE_INIT = 0,
|
|
|
+ TPACPI_LIFE_RUNNING,
|
|
|
+ TPACPI_LIFE_EXITING,
|
|
|
+} tpacpi_lifecycle;
|
|
|
+
|
|
|
/****************************************************************************
|
|
|
****************************************************************************
|
|
|
*
|
|
@@ -342,6 +348,9 @@ static void dispatch_acpi_notify(acpi_handle handle, u32 event, void *data)
|
|
|
{
|
|
|
struct ibm_struct *ibm = data;
|
|
|
|
|
|
+ if (tpacpi_lifecycle != TPACPI_LIFE_RUNNING)
|
|
|
+ return;
|
|
|
+
|
|
|
if (!ibm || !ibm->acpi || !ibm->acpi->notify)
|
|
|
return;
|
|
|
|
|
@@ -3899,6 +3908,9 @@ static void fan_watchdog_fire(struct work_struct *ignored)
|
|
|
{
|
|
|
int rc;
|
|
|
|
|
|
+ if (tpacpi_lifecycle != TPACPI_LIFE_RUNNING)
|
|
|
+ return;
|
|
|
+
|
|
|
printk(IBM_NOTICE "fan watchdog: enabling fan\n");
|
|
|
rc = fan_set_enable();
|
|
|
if (rc < 0) {
|
|
@@ -3919,7 +3931,8 @@ static void fan_watchdog_reset(void)
|
|
|
if (fan_watchdog_active)
|
|
|
cancel_delayed_work(&fan_watchdog_task);
|
|
|
|
|
|
- if (fan_watchdog_maxinterval > 0) {
|
|
|
+ if (fan_watchdog_maxinterval > 0 &&
|
|
|
+ tpacpi_lifecycle != TPACPI_LIFE_EXITING) {
|
|
|
fan_watchdog_active = 1;
|
|
|
if (!schedule_delayed_work(&fan_watchdog_task,
|
|
|
msecs_to_jiffies(fan_watchdog_maxinterval
|
|
@@ -4685,6 +4698,8 @@ static int __init thinkpad_acpi_module_init(void)
|
|
|
{
|
|
|
int ret, i;
|
|
|
|
|
|
+ tpacpi_lifecycle = TPACPI_LIFE_INIT;
|
|
|
+
|
|
|
/* Parameter checking */
|
|
|
if (hotkey_report_mode > 2)
|
|
|
return -EINVAL;
|
|
@@ -4781,6 +4796,7 @@ static int __init thinkpad_acpi_module_init(void)
|
|
|
tp_features.input_device_registered = 1;
|
|
|
}
|
|
|
|
|
|
+ tpacpi_lifecycle = TPACPI_LIFE_RUNNING;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -4788,6 +4804,8 @@ static void thinkpad_acpi_module_exit(void)
|
|
|
{
|
|
|
struct ibm_struct *ibm, *itmp;
|
|
|
|
|
|
+ tpacpi_lifecycle = TPACPI_LIFE_EXITING;
|
|
|
+
|
|
|
list_for_each_entry_safe_reverse(ibm, itmp,
|
|
|
&tpacpi_all_drivers,
|
|
|
all_drivers) {
|