[Qemu-devel] [PATCH] spapr: Disallow unsupported kernel-irqchip settings

Greg Kurz posted 1 patch 5 years, 2 months ago
Failed in applying to current master (apply log)
hw/ppc/spapr_irq.c |   13 +++++++++++++
1 file changed, 13 insertions(+)
[Qemu-devel] [PATCH] spapr: Disallow unsupported kernel-irqchip settings
Posted by Greg Kurz 5 years, 2 months ago
Split mode doesn't make sense on pseries, neither with XICS nor XIVE. But
passing kernel-irqchip=split silently behaves like kernel-irqchip=on.
Other architectures that support kernel-irqchip do terminate QEMU when
split mode is requested but not available though. Do the same with pseries
for consistency.

Similarly, passing kernel-irqchip=on,accel=tcg starts the machine with the
emulated interrupt controller, ie, behaves like kernel-irqchip=off. However,
when passing  kernel-irqchip=on,accel=kvm, if we can't initialize the KVM
XICS for some reason, ie, xics_kvm_init() fails, then QEMU is terminated.
This is inconsistent. Terminate QEMU all the same when requesting the
in-kernel interrupt controller without KVM.

Signed-off-by: Greg Kurz <groug@kaod.org>
---

The odds for someone to have an existing pseries setup with split mode are
very low since this is really an x86 thingy. And I guess we don't really
care to break the silly kernel-irqchip=on,accel=tcg case. But if we really
need to stay bug compatible, the errors can be turned into warnings.
---
 hw/ppc/spapr_irq.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
index 2d7a7c163876..80b0083b8e38 100644
--- a/hw/ppc/spapr_irq.c
+++ b/hw/ppc/spapr_irq.c
@@ -600,6 +600,19 @@ sPAPRIrq spapr_irq_dual = {
  */
 void spapr_irq_init(sPAPRMachineState *spapr, Error **errp)
 {
+    MachineState *machine = MACHINE(spapr);
+
+    if (machine_kernel_irqchip_split(machine)) {
+        error_setg(errp, "kernel_irqchip split mode not supported on pseries");
+        return;
+    }
+
+    if (!kvm_enabled() && machine_kernel_irqchip_required(machine)) {
+        error_setg(errp,
+                   "kernel_irqchip requested but only available with KVM");
+        return;
+    }
+
     /* Initialize the MSI IRQ allocator. */
     if (!SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) {
         spapr_irq_msi_init(spapr, spapr->irq->nr_msis);


Re: [Qemu-devel] [PATCH] spapr: Disallow unsupported kernel-irqchip settings
Posted by David Gibson 5 years, 2 months ago
On Fri, Feb 08, 2019 at 07:17:47PM +0100, Greg Kurz wrote:
> Split mode doesn't make sense on pseries, neither with XICS nor XIVE. But
> passing kernel-irqchip=split silently behaves like kernel-irqchip=on.
> Other architectures that support kernel-irqchip do terminate QEMU when
> split mode is requested but not available though. Do the same with pseries
> for consistency.
> 
> Similarly, passing kernel-irqchip=on,accel=tcg starts the machine with the
> emulated interrupt controller, ie, behaves like kernel-irqchip=off. However,
> when passing  kernel-irqchip=on,accel=kvm, if we can't initialize the KVM
> XICS for some reason, ie, xics_kvm_init() fails, then QEMU is terminated.
> This is inconsistent. Terminate QEMU all the same when requesting the
> in-kernel interrupt controller without KVM.
> 
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---
> 
> The odds for someone to have an existing pseries setup with split mode are
> very low since this is really an x86 thingy. And I guess we don't really
> care to break the silly kernel-irqchip=on,accel=tcg case. But if we really
> need to stay bug compatible, the errors can be turned into warnings.

Applied, thanks.

> ---
>  hw/ppc/spapr_irq.c |   13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
> index 2d7a7c163876..80b0083b8e38 100644
> --- a/hw/ppc/spapr_irq.c
> +++ b/hw/ppc/spapr_irq.c
> @@ -600,6 +600,19 @@ sPAPRIrq spapr_irq_dual = {
>   */
>  void spapr_irq_init(sPAPRMachineState *spapr, Error **errp)
>  {
> +    MachineState *machine = MACHINE(spapr);
> +
> +    if (machine_kernel_irqchip_split(machine)) {
> +        error_setg(errp, "kernel_irqchip split mode not supported on pseries");
> +        return;
> +    }
> +
> +    if (!kvm_enabled() && machine_kernel_irqchip_required(machine)) {
> +        error_setg(errp,
> +                   "kernel_irqchip requested but only available with KVM");
> +        return;
> +    }
> +
>      /* Initialize the MSI IRQ allocator. */
>      if (!SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) {
>          spapr_irq_msi_init(spapr, spapr->irq->nr_msis);
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson