diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 3 | ||||
-rw-r--r-- | arch/i386/kernel/apic.c | 10 | ||||
-rw-r--r-- | drivers/acpi/processor_idle.c | 3 | ||||
-rw-r--r-- | include/asm-i386/apic.h | 1 |
4 files changed, 16 insertions, 1 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index e39ab0c99fbb..09640a8f7ceb 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -780,6 +780,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
780 | lapic [IA-32,APIC] Enable the local APIC even if BIOS | 780 | lapic [IA-32,APIC] Enable the local APIC even if BIOS |
781 | disabled it. | 781 | disabled it. |
782 | 782 | ||
783 | lapic_timer_c2_ok [IA-32,APIC] trust the local apic timer in | ||
784 | C2 power state. | ||
785 | |||
783 | lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip | 786 | lasi= [HW,SCSI] PARISC LASI driver for the 53c700 chip |
784 | Format: addr:<io>,irq:<irq> | 787 | Format: addr:<io>,irq:<irq> |
785 | 788 | ||
diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c index 244c3fe9b8c3..e88415282a6f 100644 --- a/arch/i386/kernel/apic.c +++ b/arch/i386/kernel/apic.c | |||
@@ -64,6 +64,9 @@ static int enable_local_apic __initdata = 0; | |||
64 | static int local_apic_timer_verify_ok; | 64 | static int local_apic_timer_verify_ok; |
65 | /* Disable local APIC timer from the kernel commandline or via dmi quirk */ | 65 | /* Disable local APIC timer from the kernel commandline or via dmi quirk */ |
66 | static int local_apic_timer_disabled; | 66 | static int local_apic_timer_disabled; |
67 | /* Local APIC timer works in C2 */ | ||
68 | int local_apic_timer_c2_ok; | ||
69 | EXPORT_SYMBOL_GPL(local_apic_timer_c2_ok); | ||
67 | 70 | ||
68 | /* | 71 | /* |
69 | * Debug level, exported for io_apic.c | 72 | * Debug level, exported for io_apic.c |
@@ -1232,6 +1235,13 @@ static int __init parse_disable_lapic_timer(char *arg) | |||
1232 | } | 1235 | } |
1233 | early_param("nolapic_timer", parse_disable_lapic_timer); | 1236 | early_param("nolapic_timer", parse_disable_lapic_timer); |
1234 | 1237 | ||
1238 | static int __init parse_lapic_timer_c2_ok(char *arg) | ||
1239 | { | ||
1240 | local_apic_timer_c2_ok = 1; | ||
1241 | return 0; | ||
1242 | } | ||
1243 | early_param("lapic_timer_c2_ok", parse_lapic_timer_c2_ok); | ||
1244 | |||
1235 | static int __init apic_set_verbosity(char *str) | 1245 | static int __init apic_set_verbosity(char *str) |
1236 | { | 1246 | { |
1237 | if (strcmp("debug", str) == 0) | 1247 | if (strcmp("debug", str) == 0) |
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c index 60773005b8af..cdf78943af4d 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c | |||
@@ -268,6 +268,7 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr, | |||
268 | struct acpi_processor_cx *cx) | 268 | struct acpi_processor_cx *cx) |
269 | { | 269 | { |
270 | struct acpi_processor_power *pwr = &pr->power; | 270 | struct acpi_processor_power *pwr = &pr->power; |
271 | u8 type = local_apic_timer_c2_ok ? ACPI_STATE_C3 : ACPI_STATE_C2; | ||
271 | 272 | ||
272 | /* | 273 | /* |
273 | * Check, if one of the previous states already marked the lapic | 274 | * Check, if one of the previous states already marked the lapic |
@@ -276,7 +277,7 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr, | |||
276 | if (pwr->timer_broadcast_on_state < state) | 277 | if (pwr->timer_broadcast_on_state < state) |
277 | return; | 278 | return; |
278 | 279 | ||
279 | if (cx->type >= ACPI_STATE_C2) | 280 | if (cx->type >= type) |
280 | pr->power.timer_broadcast_on_state = state; | 281 | pr->power.timer_broadcast_on_state = state; |
281 | } | 282 | } |
282 | 283 | ||
diff --git a/include/asm-i386/apic.h b/include/asm-i386/apic.h index cc6b1652249a..a19810a08ae9 100644 --- a/include/asm-i386/apic.h +++ b/include/asm-i386/apic.h | |||
@@ -117,6 +117,7 @@ extern void enable_NMI_through_LVT0 (void * dummy); | |||
117 | #define ARCH_APICTIMER_STOPS_ON_C3 1 | 117 | #define ARCH_APICTIMER_STOPS_ON_C3 1 |
118 | 118 | ||
119 | extern int timer_over_8254; | 119 | extern int timer_over_8254; |
120 | extern int local_apic_timer_c2_ok; | ||
120 | 121 | ||
121 | #else /* !CONFIG_X86_LOCAL_APIC */ | 122 | #else /* !CONFIG_X86_LOCAL_APIC */ |
122 | static inline void lapic_shutdown(void) { } | 123 | static inline void lapic_shutdown(void) { } |