linux/arch/mips
James Hogan b45bacd2d0 MIPS: KVM: Fix timer IRQ race when writing CP0_Compare
Writing CP0_Compare clears the timer interrupt pending bit
(CP0_Cause.TI), but this wasn't being done atomically. If a timer
interrupt raced with the write of the guest CP0_Compare, the timer
interrupt could end up being pending even though the new CP0_Compare is
nowhere near CP0_Count.

We were already updating the hrtimer expiry with
kvm_mips_update_hrtimer(), which used both kvm_mips_freeze_hrtimer() and
kvm_mips_resume_hrtimer(). Close the race window by expanding out
kvm_mips_update_hrtimer(), and clearing CP0_Cause.TI and setting
CP0_Compare between the freeze and resume. Since the pending timer
interrupt should not be cleared when CP0_Compare is written via the KVM
user API, an ack argument is added to distinguish the source of the
write.

Fixes: e30492bbe9 ("MIPS: KVM: Rewrite count/compare timer emulation")
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
Cc: <stable@vger.kernel.org> # 3.16.x-
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2016-05-10 15:56:50 +02:00
..
alchemy MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
ar7 MIPS: ar7: use gpiochip data pointer 2016-02-19 09:51:43 +01:00
ath25
ath79 MIPS: ath79: Fix the ar913x reference clock rate 2016-04-03 12:32:10 +02:00
bcm47xx FIRMWARE: Broadcom: Fix grammar of warning messages in bcm47xx_sprom.c. 2016-04-03 12:32:09 +02:00
bcm63xx Merge branch 'ib-mfd-regulator-gpio-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd into devel 2016-03-09 17:40:37 +07:00
bmips irqchips/bmips: Add bcm6345-l1 interrupt controller 2016-02-08 15:03:42 +01:00
boot MIPS: BMIPS: Fix gisb-arb compatible string for 7435 2016-04-04 15:25:32 +02:00
cavium-octeon MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
cobalt
configs MIPS: ci20: Enable NAND and UBIFS support in defconfig. 2016-04-03 12:32:09 +02:00
dec MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
emma
fw MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
include MIPS: KVM: Fix timer IRQ race when writing CP0_Compare 2016-05-10 15:56:50 +02:00
jazz
jz4740 MIPS: jz4740: Fix surviving instance of irq_to_gpio() 2016-02-29 11:23:49 +01:00
kernel MIPS: traps.c: Verify the ISA for microMIPS RDHWR emulation 2016-04-04 15:25:34 +02:00
kvm MIPS: KVM: Fix timer IRQ race when writing CP0_Compare 2016-05-10 15:56:50 +02:00
lantiq
lasat
lib MIPS: Cleanup the unused __arch_local_irq_restore() function 2016-01-22 01:58:49 +01:00
loongson32
loongson64 MIPS: hpet: Choose a safe value for the ETIME check 2016-01-22 02:00:49 +01:00
math-emu MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
mm MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
mti-malta MIPS: Fix early CM probing 2016-02-09 17:18:31 +01:00
mti-sead3
net
netlogic
oprofile
paravirt
pci PCI changes for the v4.6 merge window: 2016-03-16 14:45:55 -07:00
pic32 clk: Get rid of HAVE_MACH_CLKDEV 2016-02-25 14:41:20 -08:00
pistachio
pmcs-msp71xx serial: Fix ASYNC_* => UPF_* flags misuse 2016-01-28 14:17:42 -08:00
pnx833x
power
ralink MIPS: pci: Add MT7620a PCIE driver 2016-01-20 00:39:20 +01:00
rb532 MIPS: rb532: use gpiochip data pointer 2016-02-19 09:51:44 +01:00
sgi-ip22
sgi-ip27 MIPS: Fix misspellings in comments. 2016-04-03 12:32:09 +02:00
sgi-ip32
sibyte
sni
txx9 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2016-03-19 10:05:34 -07:00
vdso
vr41xx
xilfpga
Kbuild
Kbuild.platforms MIPS: Add support for PIC32MZDA platform 2016-01-24 02:53:28 +01:00
Kconfig The clk changes for this release cycle are mostly dominated by 2016-03-23 06:06:45 -07:00
Kconfig.debug
Makefile MIPS: Loongson-3: Improve -march option and move it to Platform 2016-01-22 01:59:18 +01:00