diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-10-21 08:14:15 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-10-21 08:14:15 +0200 |
| commit | d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0 (patch) | |
| tree | 1cf2e78b8e7be71a47c8b978dea915533e965cbe /arch/x86/kernel/apic/apic.c | |
| parent | af0c8b2bf67b25756f27644936e74fd9a6273bd2 (diff) | |
| parent | 42f7652d3eb527d03665b09edac47f85fb600924 (diff) | |
| download | linux-d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0.tar.gz linux-d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0.tar.bz2 linux-d1fb8a78b2ff1fe4e9478c75b4fbec588a73c1b0.zip | |
Merge tag 'v6.12-rc4' into sched/core, to resolve conflict
Overlapping fixes solving the same bug slightly differently:
7266f0a6d3bb fs/bcachefs: Fix __wait_on_freeing_inode() definition of waitqueue entry
3b80552e7057 bcachefs: __wait_for_freeing_inode: Switch to wait_bit_queue_entry
Use the upstream version.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel/apic/apic.c')
| -rw-r--r-- | arch/x86/kernel/apic/apic.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index 6513c53c9459..c5fb28e6451a 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -440,7 +440,19 @@ static int lapic_timer_shutdown(struct clock_event_device *evt) v = apic_read(APIC_LVTT); v |= (APIC_LVT_MASKED | LOCAL_TIMER_VECTOR); apic_write(APIC_LVTT, v); - apic_write(APIC_TMICT, 0); + + /* + * Setting APIC_LVT_MASKED (above) should be enough to tell + * the hardware that this timer will never fire. But AMD + * erratum 411 and some Intel CPU behavior circa 2024 say + * otherwise. Time for belt and suspenders programming: mask + * the timer _and_ zero the counter registers: + */ + if (v & APIC_LVT_TIMER_TSCDEADLINE) + wrmsrl(MSR_IA32_TSC_DEADLINE, 0); + else + apic_write(APIC_TMICT, 0); + return 0; } |
