android_kernel_oneplus_msm8998/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 ARM: Dove: Fix compiler warnings with C=1 builds 2013-11-24 02:36:55 +00:00
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 ARM: ep93xx: use soc bus 2013-11-25 14:24:28 -08:00
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 GPIO bulk changes for the v3.13 development cycle 2013-11-12 15:50:46 +09:00
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 dmaengine: remove DMA unmap from drivers 2013-11-14 11:04:38 -08:00
mach-iop32x ARM: iop32x: fix power off handling for the EM7210 board 2014-01-31 14:58:53 -08:00
mach-iop33x ARM: plat-iop: pass physical base for GPIO 2013-09-20 23:05:19 +02:00
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 ARM: ks8695: delete local <mach/gpio.h> header 2013-12-03 11:26:05 +01:00
mach-lpc32xx ARM: lpc32xx: move custom GPIO header 2013-12-03 11:26:06 +01:00
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 ARM: mv78xx0: delete local <mach/gpio.h> header 2013-12-03 11:26:06 +01:00
mach-mvebu mvebu fixes for v3.13 (incremental #2) 2014-01-31 14:59:28 -08:00
mach-mxs ARM: SoC DT updates for 3.13 2013-11-11 17:34:56 +09:00
mach-netx
mach-nomadik ARM: nomadik: get rid of explicit ethernet GPIO management 2013-11-28 21:08:42 +01:00
mach-nspire ARM: nspire: remove custom .init_time hook 2013-09-29 21:09:37 +02:00
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 ARM: orion5x: drop unused include from common.c 2013-11-24 03:02:20 +00:00
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 ARM: SoC board updates for 3.13 2013-11-11 16:57:16 +09:00
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 ARM: SAMSUNG: Initialize PWM backlight enable_gpio field 2013-10-16 09:05:57 +02:00
mach-s5pc100 ARM: SAMSUNG: Initialize PWM backlight enable_gpio field 2013-10-16 09:05:57 +02:00
mach-s5pv210 pwm: Changes for v3.13-rc1 2013-11-16 12:21:40 -08:00
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 arm: socfpga: Enable ARM_TWD for socfpga 2013-12-03 14:19:48 -08:00
mach-spear ARM: drop explicit selection of HAVE_CLK and CLKDEV_LOOKUP 2013-10-07 10:41:32 -07:00
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 ARM: vexpress/TC2: Implement MCPM power_down_finish() 2013-11-25 14:12:14 -08:00
mach-virt
mach-vt8500 ARM: drop explicit selection of HAVE_CLK and CLKDEV_LOOKUP 2013-10-07 10:41:32 -07:00
mach-w90x900 ARM: w90x900: delete <mach/gpio.h> 2013-10-01 10:33:02 +02:00
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 Merge branch 'soc/sched_clock' into next/soc 2013-12-06 08:05:55 -08:00
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 ARM: 7873/1: vfp: clear vfp_current_hw_state for dying cpu 2013-10-30 22:10:10 +00:00
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