summaryrefslogtreecommitdiffstats
path: root/arch/x86/um/setjmp_64.S
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@ozlabs.org>2018-06-07 10:04:37 +0200
committerPaul Mackerras <paulus@ozlabs.org>2018-06-13 01:45:28 +0200
commit916ccadccdcd8a0b7184dce37066a9fb2f9b4195 (patch)
treef96e9a1d3d6007a7753d9e4cd891b74b8f683a91 /arch/x86/um/setjmp_64.S
parentKVM: PPC: Book3S PR: Handle additional interrupt types (diff)
downloadlinux-916ccadccdcd8a0b7184dce37066a9fb2f9b4195.tar.xz
linux-916ccadccdcd8a0b7184dce37066a9fb2f9b4195.zip
KVM: PPC: Book3S PR: Fix MSR setting when delivering interrupts
This makes sure that MSR "partial-function" bits are not transferred to SRR1 when delivering an interrupt. This was causing failures in guests running kernels that include commit f3d96e698ed0 ("powerpc/mm: Overhaul handling of bad page faults", 2017-07-19), which added code to check bits of SRR1 on instruction storage interrupts (ISIs) that indicate a bad page fault. The symptom was that a guest user program that handled a signal and attempted to return from the signal handler would get a SIGBUS signal and die. The code that generated ISIs and some other interrupts would previously set bits in the guest MSR to indicate the interrupt status and then call kvmppc_book3s_queue_irqprio(). This technique no longer works now that kvmppc_inject_interrupt() is masking off those bits. Instead we make kvmppc_core_queue_data_storage() and kvmppc_core_queue_inst_storage() call kvmppc_inject_interrupt() directly, and make sure that all the places that generate ISIs or DSIs call kvmppc_core_queue_{data,inst}_storage instead of kvmppc_book3s_queue_irqprio(). Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
Diffstat (limited to 'arch/x86/um/setjmp_64.S')
0 files changed, 0 insertions, 0 deletions