[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-ppc] [PATCH for-4.1 2/2] xics/kvm: Fix fallback to emulated XI
From: |
Cédric Le Goater |
Subject: |
Re: [Qemu-ppc] [PATCH for-4.1 2/2] xics/kvm: Fix fallback to emulated XICS |
Date: |
Wed, 24 Jul 2019 19:17:41 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 |
On 24/07/2019 18:57, Greg Kurz wrote:
> Commit 4812f2615288 tried to fix rollback path of xics_kvm_connect() but
> it isn't enough. If we fail to create the KVM device, the guest fails
> to boot later on with:
>
> [ 0.010817] pci 0000:00:00.0: Adding to iommu group 0
> [ 0.010863] irq: unknown-1 didn't like hwirq-0x1200 to VIRQ17 mapping
> (rc=-22)
> [ 0.010923] pci 0000:00:01.0: Adding to iommu group 0
> [ 0.010968] irq: unknown-1 didn't like hwirq-0x1201 to VIRQ17 mapping
> (rc=-22)
> [ 0.011543] EEH: No capable adapters found
> [ 0.011597] irq: unknown-1 didn't like hwirq-0x1000 to VIRQ17 mapping
> (rc=-22)
> [ 0.011651] audit: type=2000 audit(1563977526.000:1): state=initialized
> audit_enabled=0 res=1
> [ 0.011703] ------------[ cut here ]------------
> [ 0.011729] event-sources: Unable to allocate interrupt number for
> /event-sources/epow-events
> [ 0.011776] WARNING: CPU: 0 PID: 1 at
> arch/powerpc/platforms/pseries/event_sources.c:34
> request_event_sources_irqs+0xbc/0x150
> [ 0.011828] Modules linked in:
> [ 0.011850] CPU: 0 PID: 1 Comm: swapper/0 Not tainted
> 5.1.17-300.fc30.ppc64le #1
> [ 0.011886] NIP: c0000000000d4fac LR: c0000000000d4fa8 CTR:
> c0000000018f0000
> [ 0.011923] REGS: c00000001e4c38d0 TRAP: 0700 Not tainted
> (5.1.17-300.fc30.ppc64le)
> [ 0.011966] MSR: 8000000002029033 <SF,VEC,EE,ME,IR,DR,RI,LE> CR:
> 28000284 XER: 20040000
> [ 0.012012] CFAR: c00000000011b42c IRQMASK: 0
> [ 0.012012] GPR00: c0000000000d4fa8 c00000001e4c3b60 c0000000015fc400
> 0000000000000051
> [ 0.012012] GPR04: 0000000000000001 0000000000000000 0000000000000081
> 772d6576656e7473
> [ 0.012012] GPR08: 000000001edf0000 c0000000014d4830 c0000000014d4830
> 6e6576652f20726f
> [ 0.012012] GPR12: 0000000000000000 c0000000018f0000 c000000000010bf0
> 0000000000000000
> [ 0.012012] GPR16: 0000000000000000 0000000000000000 0000000000000000
> 0000000000000000
> [ 0.012012] GPR20: 0000000000000000 0000000000000000 0000000000000000
> 0000000000000000
> [ 0.012012] GPR24: 0000000000000000 0000000000000000 c000000000ebbf00
> c0000000000d5570
> [ 0.012012] GPR28: c000000000ebc008 c00000001fff8248 0000000000000000
> 0000000000000000
> [ 0.012372] NIP [c0000000000d4fac] request_event_sources_irqs+0xbc/0x150
> [ 0.012409] LR [c0000000000d4fa8] request_event_sources_irqs+0xb8/0x150
> [ 0.012445] Call Trace:
> [ 0.012462] [c00000001e4c3b60] [c0000000000d4fa8]
> request_event_sources_irqs+0xb8/0x150 (unreliable)
> [ 0.012513] [c00000001e4c3bf0] [c000000001042848]
> __machine_initcall_pseries_init_ras_IRQ+0xc8/0xf8
> [ 0.012563] [c00000001e4c3c20] [c000000000010810]
> do_one_initcall+0x60/0x254
> [ 0.012611] [c00000001e4c3cf0] [c000000001024538]
> kernel_init_freeable+0x35c/0x444
> [ 0.012655] [c00000001e4c3db0] [c000000000010c14] kernel_init+0x2c/0x148
> [ 0.012693] [c00000001e4c3e20] [c00000000000bdc4]
> ret_from_kernel_thread+0x5c/0x78
> [ 0.012736] Instruction dump:
> [ 0.012759] 38a00000 7c7f1b78 7f64db78 2c1f0000 2fbf0000 78630020 4180002c
> 409effa8
> [ 0.012805] 7fa4eb78 7f43d378 48046421 60000000 <0fe00000> 3bde0001
> 2c1e0010 7fde07b4
> [ 0.012851] ---[ end trace aa5785707323fad3 ]---
>
> This happens because QEMU fell back on XICS emulation but didn't unregister
> the RTAS calls from KVM. The emulated RTAS calls are hence never called and
> the KVM ones return an error to the guest since the KVM device is absent.
>
> The sanity checks in xics_kvm_disconnect() are abusive since we're freeing
> the KVM device. Simply drop them.
>
> Fixes: 4812f2615288 "xics/kvm: Add proper rollback to xics_kvm_init()"
> Signed-off-by: Greg Kurz <address@hidden>
Reviewed-by: Cédric Le Goater <address@hidden>
Thanks,
C.
> ---
> hw/intc/xics_kvm.c | 11 -----------
> 1 file changed, 11 deletions(-)
>
> diff --git a/hw/intc/xics_kvm.c b/hw/intc/xics_kvm.c
> index 2df1f3e92c7e..65c35f90f9af 100644
> --- a/hw/intc/xics_kvm.c
> +++ b/hw/intc/xics_kvm.c
> @@ -430,17 +430,6 @@ fail:
>
> void xics_kvm_disconnect(SpaprMachineState *spapr, Error **errp)
> {
> - /* The KVM XICS device is not in use */
> - if (kernel_xics_fd == -1) {
> - return;
> - }
> -
> - if (!kvm_enabled() || !kvm_check_extension(kvm_state, KVM_CAP_IRQ_XICS))
> {
> - error_setg(errp,
> - "KVM and IRQ_XICS capability must be present for KVM XICS
> device");
> - return;
> - }
> -
> /*
> * Only on P9 using the XICS-on XIVE KVM device:
> *
>