There are a couple fixes in stable that I think we should take
f86c4fbd930ff irqchip/gic: Ensure ordering between read of INTACK and shared data
dd5f1b049dc13 irqchip/gic-v3: Fix ICC_SGI1R_EL1.INTID decoding mask
The first would be tough to test, but the commit message sold me. The second isn't a problem for a Linux guest kernel, atm, but I can reproduce easily with kvm-unit-tests.
7c9b973061b03 irqchip/gic-v3: Configure all interrupts as non-secure Group-1
This one is necessary to be able to run the RHELSA kernel under QEMU emulation (TCG)
Verified on cavium-thunderx2-01.khw.lab.eng.bos.redhat.com , kernel 4.5.0-0.47.el7.aarch64. I asked drjones for suggestions on how to test these patches, and executed the tests below:
(In reply to Andrew Jones from comment #0)
> f86c4fbd930ff irqchip/gic: Ensure ordering between read of INTACK and shared
> dd5f1b049dc13 irqchip/gic-v3: Fix ICC_SGI1R_EL1.INTID decoding mask
Ran kvm-unit-tests from https://github.com/rhdrjones/kvm-unit-tests.git , branch arm/gic (commit 47722c7). This caused a kernel panic when testing without the fix, but works now with the fix:
[root@cavium-thunderx2-01 kvm-unit-tests]# uname -r
[root@cavium-thunderx2-01 kvm-unit-tests]# dmesg | grep -i gic
[ 0.000000] GIC: Using split EOI/Deactivate mode
[ 0.000000] GIC: using LPI property table @0x0000000ffbf60000
[ 1.065786] CPU features: detected feature: GIC system register CPU interface
[ 1.102768] ACPI: Using GIC for interrupt routing
[ 5.706505] kvm : disabling GICv2 emulation
[ 5.706519] kvm : GIC V3, GICv Base=0x0, IRQ=56
[ 11.469482] sd 0:0:0:0: [sda] 7814037168 512-byte logical blocks: (4.00 TB/3.64 TiB)
[root@cavium-thunderx2-01 kvm-unit-tests]# qemu-system-aarch64 --version
QEMU emulator version 2.6.90 (v2.7.0-rc0), Copyright (c) 2003-2008 Fabrice Bellard
[root@cavium-thunderx2-01 kvm-unit-tests]# ./run_tests.sh
PASS selftest-setup (2 tests)
PASS selftest-vectors-kernel (2 tests)
PASS selftest-vectors-user (2 tests)
PASS selftest-smp (97 tests)
SKIP gicv2-ipi (timeout -k 1s --foreground 90s qemu-system-aarch64 -machine virt,gic-version=host,accel=kvm -cpu host -device virtio-serial-device -device virtconsole,chardev=ctd -chardev testdev,id=ctd -display none -serial stdio -kernel _NO_FILE_4Uhere_ -smp 8 -machine gic-version=2 -append ipi
KVM_SET_DEVICE_ATTR failed: Invalid argument)
PASS gicv3-ipi (3 tests)
(In reply to Andrew Jones from comment #1)
> 7c9b973061b03 irqchip/gic-v3: Configure all interrupts as non-secure Group-1
Ran qemu-system-aarch64 with RHELSA kernel as a guest, boots up to shell without hanging. This was tested to hang during boot without the fix, but works now with the fix:
[root@cavium-thunderx2-01 ~]# qemu-system-aarch64 -M virt,accel=tcg,gic-version=3 -cpu cortex-a57 -display none -serial stdio -kernel vmlinuz-4.5.0-0.48.el7.aarch64 --initrd initramfs-4.5.0-0.48.el7.aarch64.img -m 1024 -append 'init=/bin/sh quiet'
[ 0.000000] ACPI: Failed to init ACPI tables
[ 2.885556] dmi: Firmware registration failed.
[ 17.123499] kvm : HYP mode not available
[ 18.648617] dmi-sysfs: dmi entry is absent.
[ ... ]
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
after mounting them and attach it to a bug report.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.