linux/arch/arm
Marc Zyngier b20c9f29c5 arm/arm64: KVM: detect CPU reset on CPU_PM_EXIT
Commit 1fcf7ce0c6 (arm: kvm: implement CPU PM notifier) added
support for CPU power-management, using a cpu_notifier to re-init
KVM on a CPU that entered CPU idle.

The code assumed that a CPU entering idle would actually be powered
off, loosing its state entierely, and would then need to be
reinitialized. It turns out that this is not always the case, and
some HW performs CPU PM without actually killing the core. In this
case, we try to reinitialize KVM while it is still live. It ends up
badly, as reported by Andre Przywara (using a Calxeda Midway):

[    3.663897] Kernel panic - not syncing: unexpected prefetch abort in Hyp mode at: 0x685760
[    3.663897] unexpected data abort in Hyp mode at: 0xc067d150
[    3.663897] unexpected HVC/SVC trap in Hyp mode at: 0xc0901dd0

The trick here is to detect if we've been through a full re-init or
not by looking at HVBAR (VBAR_EL2 on arm64). This involves
implementing the backend for __hyp_get_vectors in the main KVM HYP
code (rather small), and checking the return value against the
default one when the CPU notifier is called on CPU_PM_EXIT.

Reported-by: Andre Przywara <osp@andrep.de>
Tested-by: Andre Przywara <osp@andrep.de>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Rob Herring <rob.herring@linaro.org>
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2014-02-27 19:27:10 +01:00
..
boot A collection of ARM SoC fixes for v3.14-rc1. 2014-02-15 15:01:33 -08:00
common ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
configs ARM: multi_v7_defconfig: Select CONFIG_SOC_DRA7XX 2014-02-10 10:38:06 -08:00
crypto CRYPTO: Fix more AES build errors 2014-01-05 13:59:56 +00:00
firmware ARM: add basic support for Trusted Foundations 2013-12-13 12:50:30 -07:00
include Merge branches 'fixes' and 'misc' into for-linus 2014-01-28 21:38:48 +00:00
kernel Merge branches 'fixes' and 'misc' into for-linus 2014-01-28 21:38:48 +00:00
kvm arm/arm64: KVM: detect CPU reset on CPU_PM_EXIT 2014-02-27 19:27:10 +01:00
lib ARM: 7877/1: use built-in byte swap function 2013-12-29 12:32:45 +00:00
mach-at91 ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-bcm ARM: pinctrl: Add Broadcom Capri pinctrl driver 2014-01-16 14:25:38 +01:00
mach-bcm2835 ARM: bcm2835: Fix grammar in help message 2014-01-02 12:07:52 -08:00
mach-berlin ARM: add initial support for Marvell Berlin SoCs 2013-12-13 16:31:07 +01:00
mach-clps711x ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-cns3xxx
mach-davinci ARM: driver updates for 3.14 2014-01-23 18:49:36 -08:00
mach-dove
mach-ebsa110
mach-efm32 ARM: new platform for Energy Micro's EFM32 Cortex-M3 SoCs 2013-12-16 17:51:33 +01:00
mach-ep93xx
mach-exynos ACPI and power management updates for 3.14-rc1 2014-01-24 15:51:02 -08:00
mach-footbridge Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2014-01-24 17:17:30 -08:00
mach-gemini
mach-highbank Merge branches 'amba', 'fixes', 'kees', 'misc' and 'unstable/sa11x0' into for-next 2014-01-21 21:26:33 +00:00
mach-hisi ARM: hisi: fix kconfig warning on HAVE_ARM_TWD 2014-02-02 19:52:42 -08:00
mach-imx ARM: imx6: Initialize low-power mode early again 2014-02-10 10:37:32 -08:00
mach-integrator ARM: integrator: restore static map on the CP 2014-01-31 14:58:52 -08:00
mach-iop13xx
mach-iop32x ARM: iop32x: fix power off handling for the EM7210 board 2014-01-31 14:58:53 -08:00
mach-iop33x
mach-ixp4xx ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-keystone ARM: keystone: config: fix build warning when CONFIG_DMADEVICES is not set 2014-01-31 15:03:53 -08:00
mach-kirkwood mvebu fixes for v3.13 (incremental #2) 2014-01-31 14:59:28 -08:00
mach-ks8695
mach-lpc32xx
mach-mmp ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-moxart ARM: moxart: move DMA_OF selection to driver 2014-02-02 19:52:45 -08:00
mach-msm ARM: driver updates for 3.14 2014-01-23 18:49:36 -08:00
mach-mv78xx0
mach-mvebu mvebu fixes for v3.13 (incremental #2) 2014-01-31 14:59:28 -08:00
mach-mxs
mach-netx
mach-nomadik
mach-nspire
mach-omap1 ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-omap2 ARM: fix HAVE_ARM_TWD selection for OMAP and shmobile 2014-02-02 19:52:53 -08:00
mach-orion5x
mach-picoxcell
mach-prima2 ARM: clean up cache handling in platform code 2013-12-11 16:24:34 -08:00
mach-pxa ARM: pxa: fix various compilation problems 2014-02-10 10:33:04 -08:00
mach-realview
mach-rockchip
mach-rpc
mach-s3c24xx ARM: SoC cleanups for 3.14 2014-01-23 18:36:55 -08:00
mach-s3c64xx ARM: SoC cleanups for 3.14 2014-01-23 18:36:55 -08:00
mach-s5p64x0
mach-s5pc100
mach-s5pv210
mach-sa1100 ACPI and power management updates for 3.14-rc1 2014-01-24 15:51:02 -08:00
mach-shmobile ARM: fix HAVE_ARM_TWD selection for OMAP and shmobile 2014-02-02 19:52:53 -08:00
mach-socfpga
mach-spear
mach-sti ARM: clean up cache handling in platform code 2013-12-11 16:24:34 -08:00
mach-sunxi ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-tegra ARM: driver updates for 3.14 2014-01-23 18:49:36 -08:00
mach-u300 ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
mach-ux500 ARM: SoC DT updates for 3.14 2014-01-23 18:45:38 -08:00
mach-versatile ARM: versatile: move GPIO2 and GPIO3 to core 2013-12-20 18:22:47 +01:00
mach-vexpress
mach-virt
mach-vt8500
mach-w90x900
mach-zynq ARM: zynq: Reserve not DMAable space in front of the kernel 2014-02-10 10:45:42 -08:00
mm Merge branches 'fixes' and 'misc' into for-linus 2014-01-28 21:38:48 +00:00
net bpf: do not use reciprocal divide 2014-01-15 17:02:08 -08:00
nwfpe
oprofile
plat-iop
plat-omap Merge branch 'efm32/soc' into next/soc 2013-12-20 08:59:30 -08:00
plat-orion mvebu fixes for v3.13 (incremental #2) 2014-01-31 14:59:28 -08:00
plat-pxa ARM: pxa: remove IRQF_DISABLED 2013-12-11 17:32:41 -08:00
plat-samsung MTD updates for 3.14: 2014-01-28 18:56:37 -08:00
plat-versatile ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
tools
vfp
xen xen/gnttab: Use phys_addr_t to describe the grant frame base address 2014-01-30 12:56:34 +00:00
Kconfig Bug-fixes: 2014-01-31 08:38:18 -08:00
Kconfig-nommu
Kconfig.debug ARM: SoC platform changes for 3.14 2014-01-23 18:40:49 -08:00
Makefile Merge branches 'fixes' and 'misc' into for-linus 2014-01-28 21:38:48 +00:00