diff options
author | Jean Delvare <khali@linux-fr.org> | 2010-05-27 17:58:37 (GMT) |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2010-05-27 17:58:37 (GMT) |
commit | 70dd6beac02f43a5099fcf5fddf68cfee0cbf479 (patch) | |
tree | 53d70a87157eafdf62612922a137fcc365439688 /drivers | |
parent | 31f46717997a83bdf6db0dd04810c0a329eb3148 (diff) | |
download | linux-fsl-qoriq-70dd6beac02f43a5099fcf5fddf68cfee0cbf479.tar.xz |
hwmon: (asus_atk0110) Don't load if ACPI resources aren't enforced
When the user passes the kernel parameter acpi_enforce_resources=lax,
the ACPI resources are no longer protected, so a native driver can
make use of them. In that case, we do not want the asus_atk0110 to be
loaded. Unfortunately, this driver loads automatically due to its
MODULE_DEVICE_TABLE, so the user ends up with two drivers loaded for
the same device - this is bad.
So I suggest that we prevent the asus_atk0110 driver from loading if
acpi_enforce_resources=lax.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Luca Tettamanti <kronos.it@gmail.com>
Cc: Len Brown <lenb@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/acpi/osl.c | 9 | ||||
-rw-r--r-- | drivers/hwmon/asus_atk0110.c | 7 |
2 files changed, 16 insertions, 0 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 4bc1c41..78418ce 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -1207,6 +1207,15 @@ int acpi_check_mem_region(resource_size_t start, resource_size_t n, EXPORT_SYMBOL(acpi_check_mem_region); /* + * Let drivers know whether the resource checks are effective + */ +int acpi_resources_are_enforced(void) +{ + return acpi_enforce_resources == ENFORCE_RESOURCES_STRICT; +} +EXPORT_SYMBOL(acpi_resources_are_enforced); + +/* * Acquire a spinlock. * * handle is a pointer to the spinlock_t. diff --git a/drivers/hwmon/asus_atk0110.c b/drivers/hwmon/asus_atk0110.c index 16c4202..653db1b 100644 --- a/drivers/hwmon/asus_atk0110.c +++ b/drivers/hwmon/asus_atk0110.c @@ -1411,6 +1411,13 @@ static int __init atk0110_init(void) { int ret; + /* Make sure it's safe to access the device through ACPI */ + if (!acpi_resources_are_enforced()) { + pr_err("atk: Resources not safely usable due to " + "acpi_enforce_resources kernel parameter\n"); + return -EBUSY; + } + ret = acpi_bus_register_driver(&atk_driver); if (ret) pr_info("atk: acpi_bus_register_driver failed: %d\n", ret); |