Commit fdb8c58a1671beb51949412e053926acd5500b5f
Exists in
master
and in
7 other branches
Merge branches 'apei', 'battery-mwh-fix', 'bugzilla-10807', 'bugzilla-14736', 'b…
…ugzilla-14679', 'bugzilla-16396', 'launchpad-613381' and 'misc' into release
Showing 19 changed files Side-by-side Diff
- arch/x86/kernel/acpi/cstate.c
- drivers/acpi/Kconfig
- drivers/acpi/acpi_pad.c
- drivers/acpi/acpica/aclocal.h
- drivers/acpi/acpica/exutils.c
- drivers/acpi/acpica/rsutils.c
- drivers/acpi/apei/Kconfig
- drivers/acpi/apei/erst-dbg.c
- drivers/acpi/apei/erst.c
- drivers/acpi/battery.c
- drivers/acpi/blacklist.c
- drivers/acpi/bus.c
- drivers/acpi/fan.c
- drivers/acpi/processor_core.c
- drivers/acpi/processor_perflib.c
- drivers/acpi/sleep.c
- drivers/acpi/sysfs.c
- drivers/acpi/video_detect.c
- include/acpi/acpixf.h
arch/x86/kernel/acpi/cstate.c
... | ... | @@ -61,7 +61,7 @@ |
61 | 61 | unsigned int ecx; |
62 | 62 | } states[ACPI_PROCESSOR_MAX_POWER]; |
63 | 63 | }; |
64 | -static struct cstate_entry *cpu_cstate_entry; /* per CPU ptr */ | |
64 | +static struct cstate_entry __percpu *cpu_cstate_entry; /* per CPU ptr */ | |
65 | 65 | |
66 | 66 | static short mwait_supported[ACPI_PROCESSOR_MAX_POWER]; |
67 | 67 |
drivers/acpi/Kconfig
... | ... | @@ -105,7 +105,7 @@ |
105 | 105 | |
106 | 106 | Be aware that using this interface can confuse your Embedded |
107 | 107 | Controller in a way that a normal reboot is not enough. You then |
108 | - have to power of your system, and remove the laptop battery for | |
108 | + have to power off your system, and remove the laptop battery for | |
109 | 109 | some seconds. |
110 | 110 | An Embedded Controller typically is available on laptops and reads |
111 | 111 | sensor values like battery state and temperature. |
drivers/acpi/acpi_pad.c
... | ... | @@ -382,31 +382,32 @@ |
382 | 382 | device_remove_file(&device->dev, &dev_attr_rrtime); |
383 | 383 | } |
384 | 384 | |
385 | -/* Query firmware how many CPUs should be idle */ | |
386 | -static int acpi_pad_pur(acpi_handle handle, int *num_cpus) | |
385 | +/* | |
386 | + * Query firmware how many CPUs should be idle | |
387 | + * return -1 on failure | |
388 | + */ | |
389 | +static int acpi_pad_pur(acpi_handle handle) | |
387 | 390 | { |
388 | 391 | struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL}; |
389 | 392 | union acpi_object *package; |
390 | - int rev, num, ret = -EINVAL; | |
393 | + int num = -1; | |
391 | 394 | |
392 | 395 | if (ACPI_FAILURE(acpi_evaluate_object(handle, "_PUR", NULL, &buffer))) |
393 | - return -EINVAL; | |
396 | + return num; | |
394 | 397 | |
395 | 398 | if (!buffer.length || !buffer.pointer) |
396 | - return -EINVAL; | |
399 | + return num; | |
397 | 400 | |
398 | 401 | package = buffer.pointer; |
399 | - if (package->type != ACPI_TYPE_PACKAGE || package->package.count != 2) | |
400 | - goto out; | |
401 | - rev = package->package.elements[0].integer.value; | |
402 | - num = package->package.elements[1].integer.value; | |
403 | - if (rev != 1 || num < 0) | |
404 | - goto out; | |
405 | - *num_cpus = num; | |
406 | - ret = 0; | |
407 | -out: | |
402 | + | |
403 | + if (package->type == ACPI_TYPE_PACKAGE && | |
404 | + package->package.count == 2 && | |
405 | + package->package.elements[0].integer.value == 1) /* rev 1 */ | |
406 | + | |
407 | + num = package->package.elements[1].integer.value; | |
408 | + | |
408 | 409 | kfree(buffer.pointer); |
409 | - return ret; | |
410 | + return num; | |
410 | 411 | } |
411 | 412 | |
412 | 413 | /* Notify firmware how many CPUs are idle */ |
... | ... | @@ -433,7 +434,8 @@ |
433 | 434 | uint32_t idle_cpus; |
434 | 435 | |
435 | 436 | mutex_lock(&isolated_cpus_lock); |
436 | - if (acpi_pad_pur(handle, &num_cpus)) { | |
437 | + num_cpus = acpi_pad_pur(handle); | |
438 | + if (num_cpus < 0) { | |
437 | 439 | mutex_unlock(&isolated_cpus_lock); |
438 | 440 | return; |
439 | 441 | } |
drivers/acpi/acpica/aclocal.h
drivers/acpi/acpica/exutils.c
... | ... | @@ -109,7 +109,7 @@ |
109 | 109 | * |
110 | 110 | * DESCRIPTION: Reacquire the interpreter execution region from within the |
111 | 111 | * interpreter code. Failure to enter the interpreter region is a |
112 | - * fatal system error. Used in conjuction with | |
112 | + * fatal system error. Used in conjunction with | |
113 | 113 | * relinquish_interpreter |
114 | 114 | * |
115 | 115 | ******************************************************************************/ |
drivers/acpi/acpica/rsutils.c
... | ... | @@ -149,7 +149,7 @@ |
149 | 149 | |
150 | 150 | /* |
151 | 151 | * 16-, 32-, and 64-bit cases must use the move macros that perform |
152 | - * endian conversion and/or accomodate hardware that cannot perform | |
152 | + * endian conversion and/or accommodate hardware that cannot perform | |
153 | 153 | * misaligned memory transfers |
154 | 154 | */ |
155 | 155 | case ACPI_RSC_MOVE16: |
drivers/acpi/apei/Kconfig
... | ... | @@ -34,7 +34,7 @@ |
34 | 34 | depends on ACPI_APEI |
35 | 35 | help |
36 | 36 | ERST is a way provided by APEI to save and retrieve hardware |
37 | - error infomation to and from a persistent store. Enable this | |
37 | + error information to and from a persistent store. Enable this | |
38 | 38 | if you want to debugging and testing the ERST kernel support |
39 | 39 | and firmware implementation. |
drivers/acpi/apei/erst-dbg.c
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | * APEI Error Record Serialization Table debug support |
3 | 3 | * |
4 | 4 | * ERST is a way provided by APEI to save and retrieve hardware error |
5 | - * infomation to and from a persistent store. This file provide the | |
5 | + * information to and from a persistent store. This file provide the | |
6 | 6 | * debugging/testing support for ERST kernel support and firmware |
7 | 7 | * implementation. |
8 | 8 | * |
drivers/acpi/apei/erst.c
... | ... | @@ -2,7 +2,7 @@ |
2 | 2 | * APEI Error Record Serialization Table support |
3 | 3 | * |
4 | 4 | * ERST is a way provided by APEI to save and retrieve hardware error |
5 | - * infomation to and from a persistent store. | |
5 | + * information to and from a persistent store. | |
6 | 6 | * |
7 | 7 | * For more information about ERST, please refer to ACPI Specification |
8 | 8 | * version 4.0, section 17.4. |
9 | 9 | |
10 | 10 | |
... | ... | @@ -266,13 +266,30 @@ |
266 | 266 | { |
267 | 267 | int rc; |
268 | 268 | u64 offset; |
269 | + void *src, *dst; | |
269 | 270 | |
271 | + /* ioremap does not work in interrupt context */ | |
272 | + if (in_interrupt()) { | |
273 | + pr_warning(ERST_PFX | |
274 | + "MOVE_DATA can not be used in interrupt context"); | |
275 | + return -EBUSY; | |
276 | + } | |
277 | + | |
270 | 278 | rc = __apei_exec_read_register(entry, &offset); |
271 | 279 | if (rc) |
272 | 280 | return rc; |
273 | - memmove((void *)ctx->dst_base + offset, | |
274 | - (void *)ctx->src_base + offset, | |
275 | - ctx->var2); | |
281 | + | |
282 | + src = ioremap(ctx->src_base + offset, ctx->var2); | |
283 | + if (!src) | |
284 | + return -ENOMEM; | |
285 | + dst = ioremap(ctx->dst_base + offset, ctx->var2); | |
286 | + if (!dst) | |
287 | + return -ENOMEM; | |
288 | + | |
289 | + memmove(dst, src, ctx->var2); | |
290 | + | |
291 | + iounmap(src); | |
292 | + iounmap(dst); | |
276 | 293 | |
277 | 294 | return 0; |
278 | 295 | } |
drivers/acpi/battery.c
... | ... | @@ -273,7 +273,6 @@ |
273 | 273 | POWER_SUPPLY_PROP_CYCLE_COUNT, |
274 | 274 | POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, |
275 | 275 | POWER_SUPPLY_PROP_VOLTAGE_NOW, |
276 | - POWER_SUPPLY_PROP_CURRENT_NOW, | |
277 | 276 | POWER_SUPPLY_PROP_POWER_NOW, |
278 | 277 | POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, |
279 | 278 | POWER_SUPPLY_PROP_ENERGY_FULL, |
drivers/acpi/blacklist.c
... | ... | @@ -183,6 +183,8 @@ |
183 | 183 | { |
184 | 184 | printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident); |
185 | 185 | acpi_osi_setup("!Windows 2006"); |
186 | + acpi_osi_setup("!Windows 2006 SP1"); | |
187 | + acpi_osi_setup("!Windows 2006 SP2"); | |
186 | 188 | return 0; |
187 | 189 | } |
188 | 190 | static int __init dmi_disable_osi_win7(const struct dmi_system_id *d) |
189 | 191 | |
... | ... | @@ -226,11 +228,27 @@ |
226 | 228 | }, |
227 | 229 | }, |
228 | 230 | { |
231 | + .callback = dmi_disable_osi_vista, | |
232 | + .ident = "Toshiba Satellite L355", | |
233 | + .matches = { | |
234 | + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | |
235 | + DMI_MATCH(DMI_PRODUCT_VERSION, "Satellite L355"), | |
236 | + }, | |
237 | + }, | |
238 | + { | |
229 | 239 | .callback = dmi_disable_osi_win7, |
230 | 240 | .ident = "ASUS K50IJ", |
231 | 241 | .matches = { |
232 | 242 | DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer Inc."), |
233 | 243 | DMI_MATCH(DMI_PRODUCT_NAME, "K50IJ"), |
244 | + }, | |
245 | + }, | |
246 | + { | |
247 | + .callback = dmi_disable_osi_vista, | |
248 | + .ident = "Toshiba P305D", | |
249 | + .matches = { | |
250 | + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | |
251 | + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P305D"), | |
234 | 252 | }, |
235 | 253 | }, |
236 | 254 |
drivers/acpi/bus.c
... | ... | @@ -55,7 +55,7 @@ |
55 | 55 | static int set_power_nocheck(const struct dmi_system_id *id) |
56 | 56 | { |
57 | 57 | printk(KERN_NOTICE PREFIX "%s detected - " |
58 | - "disable power check in power transistion\n", id->ident); | |
58 | + "disable power check in power transition\n", id->ident); | |
59 | 59 | acpi_power_nocheck = 1; |
60 | 60 | return 0; |
61 | 61 | } |
62 | 62 | |
63 | 63 | |
64 | 64 | |
... | ... | @@ -80,25 +80,17 @@ |
80 | 80 | |
81 | 81 | static struct dmi_system_id dsdt_dmi_table[] __initdata = { |
82 | 82 | /* |
83 | - * Insyde BIOS on some TOSHIBA machines corrupt the DSDT. | |
83 | + * Invoke DSDT corruption work-around on all Toshiba Satellite. | |
84 | 84 | * https://bugzilla.kernel.org/show_bug.cgi?id=14679 |
85 | 85 | */ |
86 | 86 | { |
87 | 87 | .callback = set_copy_dsdt, |
88 | - .ident = "TOSHIBA Satellite A505", | |
88 | + .ident = "TOSHIBA Satellite", | |
89 | 89 | .matches = { |
90 | 90 | DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), |
91 | - DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A505"), | |
91 | + DMI_MATCH(DMI_PRODUCT_NAME, "Satellite"), | |
92 | 92 | }, |
93 | 93 | }, |
94 | - { | |
95 | - .callback = set_copy_dsdt, | |
96 | - .ident = "TOSHIBA Satellite L505D", | |
97 | - .matches = { | |
98 | - DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | |
99 | - DMI_MATCH(DMI_PRODUCT_NAME, "Satellite L505D"), | |
100 | - }, | |
101 | - }, | |
102 | 94 | {} |
103 | 95 | }; |
104 | 96 | #else |
... | ... | @@ -1027,7 +1019,7 @@ |
1027 | 1019 | |
1028 | 1020 | /* |
1029 | 1021 | * If the laptop falls into the DMI check table, the power state check |
1030 | - * will be disabled in the course of device power transistion. | |
1022 | + * will be disabled in the course of device power transition. | |
1031 | 1023 | */ |
1032 | 1024 | dmi_check_system(power_nocheck_dmi_table); |
1033 | 1025 |
drivers/acpi/fan.c
drivers/acpi/processor_core.c
... | ... | @@ -29,12 +29,6 @@ |
29 | 29 | |
30 | 30 | static struct dmi_system_id __cpuinitdata processor_idle_dmi_table[] = { |
31 | 31 | { |
32 | - set_no_mwait, "IFL91 board", { | |
33 | - DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"), | |
34 | - DMI_MATCH(DMI_SYS_VENDOR, "ZEPTO"), | |
35 | - DMI_MATCH(DMI_PRODUCT_VERSION, "3215W"), | |
36 | - DMI_MATCH(DMI_BOARD_NAME, "IFL91") }, NULL}, | |
37 | - { | |
38 | 32 | set_no_mwait, "Extensa 5220", { |
39 | 33 | DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), |
40 | 34 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
drivers/acpi/processor_perflib.c
... | ... | @@ -447,8 +447,8 @@ |
447 | 447 | if (!try_module_get(calling_module)) |
448 | 448 | return -EINVAL; |
449 | 449 | |
450 | - /* is_done is set to negative if an error occured, | |
451 | - * and to postitive if _no_ error occured, but SMM | |
450 | + /* is_done is set to negative if an error occurred, | |
451 | + * and to postitive if _no_ error occurred, but SMM | |
452 | 452 | * was already notified. This avoids double notification |
453 | 453 | * which might lead to unexpected results... |
454 | 454 | */ |
drivers/acpi/sleep.c
... | ... | @@ -363,6 +363,12 @@ |
363 | 363 | return 0; |
364 | 364 | } |
365 | 365 | |
366 | +static int __init init_nvs_nosave(const struct dmi_system_id *d) | |
367 | +{ | |
368 | + acpi_nvs_nosave(); | |
369 | + return 0; | |
370 | +} | |
371 | + | |
366 | 372 | static struct dmi_system_id __initdata acpisleep_dmi_table[] = { |
367 | 373 | { |
368 | 374 | .callback = init_old_suspend_ordering, |
... | ... | @@ -395,6 +401,22 @@ |
395 | 401 | DMI_MATCH(DMI_BOARD_VENDOR, |
396 | 402 | "Matsushita Electric Industrial Co.,Ltd."), |
397 | 403 | DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"), |
404 | + }, | |
405 | + }, | |
406 | + { | |
407 | + .callback = init_nvs_nosave, | |
408 | + .ident = "Sony Vaio VGN-SR11M", | |
409 | + .matches = { | |
410 | + DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | |
411 | + DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SR11M"), | |
412 | + }, | |
413 | + }, | |
414 | + { | |
415 | + .callback = init_nvs_nosave, | |
416 | + .ident = "Everex StepNote Series", | |
417 | + .matches = { | |
418 | + DMI_MATCH(DMI_SYS_VENDOR, "Everex Systems, Inc."), | |
419 | + DMI_MATCH(DMI_PRODUCT_NAME, "Everex StepNote Series"), | |
398 | 420 | }, |
399 | 421 | }, |
400 | 422 | {}, |
drivers/acpi/sysfs.c
... | ... | @@ -100,7 +100,7 @@ |
100 | 100 | ACPI_DEBUG_INIT(ACPI_LV_EVENTS), |
101 | 101 | }; |
102 | 102 | |
103 | -static int param_get_debug_layer(char *buffer, struct kernel_param *kp) | |
103 | +static int param_get_debug_layer(char *buffer, const struct kernel_param *kp) | |
104 | 104 | { |
105 | 105 | int result = 0; |
106 | 106 | int i; |
... | ... | @@ -128,7 +128,7 @@ |
128 | 128 | return result; |
129 | 129 | } |
130 | 130 | |
131 | -static int param_get_debug_level(char *buffer, struct kernel_param *kp) | |
131 | +static int param_get_debug_level(char *buffer, const struct kernel_param *kp) | |
132 | 132 | { |
133 | 133 | int result = 0; |
134 | 134 | int i; |
... | ... | @@ -149,10 +149,18 @@ |
149 | 149 | return result; |
150 | 150 | } |
151 | 151 | |
152 | -module_param_call(debug_layer, param_set_uint, param_get_debug_layer, | |
153 | - &acpi_dbg_layer, 0644); | |
154 | -module_param_call(debug_level, param_set_uint, param_get_debug_level, | |
155 | - &acpi_dbg_level, 0644); | |
152 | +static struct kernel_param_ops param_ops_debug_layer = { | |
153 | + .set = param_set_uint, | |
154 | + .get = param_get_debug_layer, | |
155 | +}; | |
156 | + | |
157 | +static struct kernel_param_ops param_ops_debug_level = { | |
158 | + .set = param_set_uint, | |
159 | + .get = param_get_debug_level, | |
160 | +}; | |
161 | + | |
162 | +module_param_cb(debug_layer, ¶m_ops_debug_layer, &acpi_dbg_layer, 0644); | |
163 | +module_param_cb(debug_level, ¶m_ops_debug_level, &acpi_dbg_level, 0644); | |
156 | 164 | |
157 | 165 | static char trace_method_name[6]; |
158 | 166 | module_param_string(trace_method_name, trace_method_name, 6, 0644); |
drivers/acpi/video_detect.c
... | ... | @@ -59,8 +59,8 @@ |
59 | 59 | "support\n")); |
60 | 60 | *cap |= ACPI_VIDEO_BACKLIGHT; |
61 | 61 | if (ACPI_FAILURE(acpi_get_handle(handle, "_BQC", &h_dummy))) |
62 | - printk(KERN_WARNING FW_BUG PREFIX "ACPI brightness " | |
63 | - "control misses _BQC function\n"); | |
62 | + printk(KERN_WARNING FW_BUG PREFIX "No _BQC method, " | |
63 | + "cannot determine initial brightness\n"); | |
64 | 64 | /* We have backlight support, no need to scan further */ |
65 | 65 | return AE_CTRL_TERMINATE; |
66 | 66 | } |
include/acpi/acpixf.h