On 06/06/2019 19:08, Greg Kurz wrote: > If KVM is too old to support XIVE native exploitation mode, we might end > up using the emulated XIVE after CAS. This is sub-optimal if KVM in-kernel > XICS is available, which is the case most of the time. > > Also, an old KVM may not allow to destroy and re-create the KVM XICS, which > is precisely what "dual" does during machine reset. This causes QEMU to try > to switch to emulated XICS and to crash because RTAS call de-registration > isn't handled correctly. We could possibly fix that, but again we would > still end up with an emulated XICS or XIVE.
Yes. I think we should favor a KVM device over an emulated one in any case. > > "dual" is definitely not a good choice with older KVMs. Internally force > XICS when we detect this. > > Signed-off-by: Greg Kurz <gr...@kaod.org> Reviewed-by: Cédric Le Goater <c...@kaod.org> we could move the KVM tests done at the beginning of spapr_irq_init() in routine spapr_irq_check() but this is for another patch, and it's only a cleanup. Thanks, C. > --- > hw/ppc/spapr_irq.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c > index 3156daf09381..d788bd662a7a 100644 > --- a/hw/ppc/spapr_irq.c > +++ b/hw/ppc/spapr_irq.c > @@ -18,6 +18,7 @@ > #include "hw/ppc/xics_spapr.h" > #include "cpu-models.h" > #include "sysemu/kvm.h" > +#include "kvm_ppc.h" > > #include "trace.h" > > @@ -668,6 +669,15 @@ static void spapr_irq_check(SpaprMachineState *spapr, > Error **errp) > return; > } > } > + > + /* > + * KVM may be too old to support XIVE, in which case we'd rather try > + * to use the in-kernel XICS instead of the emulated XIVE. > + */ > + if (kvm_enabled() && !kvmppc_has_cap_xive() && > + spapr->irq == &spapr_irq_dual) { > + spapr->irq = &spapr_irq_xics; > + } > } > > /* >