All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/3] more ais fixups
@ 2017-09-27  7:20 Christian Borntraeger
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1 Christian Borntraeger
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Christian Borntraeger @ 2017-09-27  7:20 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic,
	Christian Borntraeger

I think Patches 1 and 2 are undisputed.
Patch 1 needs to go into 2.10.1 as well.
Patch 2 is for 2.11
Patch 3 is still under discussion if this is the right solution

v2->v3: 
- add the ais removal from the z14 cpu model
- fix indent



Christian Borntraeger (3):
  s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1
  s390x/ais: enable ais when migration is available
  s390x/ais: disable ais for compat machines

 hw/intc/s390_flic.c                |  8 ++------
 hw/intc/s390_flic_kvm.c            | 18 +++++++++++++-----
 hw/s390x/css.c                     |  4 ++--
 hw/s390x/s390-virtio-ccw.c         | 20 +++++++++++++++++---
 include/hw/s390x/s390-virtio-ccw.h |  3 +++
 include/hw/s390x/s390_flic.h       |  1 -
 target/s390x/gen-features.c        |  1 -
 target/s390x/kvm.c                 | 10 ++--------
 8 files changed, 39 insertions(+), 26 deletions(-)

-- 
2.9.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1
  2017-09-27  7:20 [Qemu-devel] [PATCH v3 0/3] more ais fixups Christian Borntraeger
@ 2017-09-27  7:20 ` Christian Borntraeger
  2017-09-27  9:12   ` Cornelia Huck
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available Christian Borntraeger
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 3/3] s390x/ais: disable ais for compat machines Christian Borntraeger
  2 siblings, 1 reply; 8+ messages in thread
From: Christian Borntraeger @ 2017-09-27  7:20 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic,
	Christian Borntraeger

We disabled ais for 2.10 lets also remove it from the z14 default model.

Fixes: 3f2d07b3b01e  s390x/ais: for 2.10 stable: disable ais facility
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
 target/s390x/gen-features.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
index c8dc104..68e6c31 100644
--- a/target/s390x/gen-features.c
+++ b/target/s390x/gen-features.c
@@ -527,7 +527,6 @@ static uint16_t default_GEN13_GA1[] = {
 #define default_GEN13_GA2 EmptyFeat
 
 static uint16_t default_GEN14_GA1[] = {
-    S390_FEAT_ADAPTER_INT_SUPPRESSION,
     S390_FEAT_INSTRUCTION_EXEC_PROT,
     S390_FEAT_GUARDED_STORAGE,
     S390_FEAT_VECTOR_PACKED_DECIMAL,
-- 
2.9.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available
  2017-09-27  7:20 [Qemu-devel] [PATCH v3 0/3] more ais fixups Christian Borntraeger
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1 Christian Borntraeger
@ 2017-09-27  7:20 ` Christian Borntraeger
  2017-09-28 14:42   ` Cornelia Huck
  2017-09-29  8:12   ` Christian Borntraeger
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 3/3] s390x/ais: disable ais for compat machines Christian Borntraeger
  2 siblings, 2 replies; 8+ messages in thread
From: Christian Borntraeger @ 2017-09-27  7:20 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic,
	Christian Borntraeger

Instead of unconditionally enabling the KVM AIS capability
in the kvm arch init function, do this in the flic realize function
when we know if migration is available. This requires to initialize
flic before the CPUs (and cpu models).

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
---
 hw/intc/s390_flic.c          |  8 ++------
 hw/intc/s390_flic_kvm.c      | 16 +++++++++++-----
 hw/s390x/css.c               |  4 ++--
 hw/s390x/s390-virtio-ccw.c   | 10 +++++++---
 include/hw/s390x/s390_flic.h |  1 -
 target/s390x/kvm.c           | 10 ++--------
 6 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
index 6eaf178..9858f0e 100644
--- a/hw/intc/s390_flic.c
+++ b/hw/intc/s390_flic.c
@@ -1,7 +1,7 @@
 /*
  * QEMU S390x floating interrupt controller (flic)
  *
- * Copyright 2014 IBM Corp.
+ * Copyright IBM Corp. 2014, 2017
  * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
  *            Cornelia Huck <cornelia.huck@de.ibm.com>
  *
@@ -136,9 +136,7 @@ static void qemu_s390_flic_reset(DeviceState *dev)
 
 bool ais_needed(void *opaque)
 {
-    S390FLICState *s = opaque;
-
-    return s->ais_supported;
+    return s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);
 }
 
 static const VMStateDescription qemu_s390_flic_vmstate = {
@@ -185,8 +183,6 @@ static void s390_flic_common_realize(DeviceState *dev, Error **errp)
                    " (%d > %d)", max_batch, ADAPTER_ROUTES_MAX_GSI);
         return;
     }
-
-    fs->ais_supported = s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);
 }
 
 static void s390_flic_class_init(ObjectClass *oc, void *data)
diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
index 7ead17a..0a370a9 100644
--- a/hw/intc/s390_flic_kvm.c
+++ b/hw/intc/s390_flic_kvm.c
@@ -1,7 +1,7 @@
 /*
  * QEMU S390x KVM floating interrupt controller (flic)
  *
- * Copyright 2014 IBM Corp.
+ * Copyright IBM Corp. 2014, 2017
  * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
  *            Cornelia Huck <cornelia.huck@de.ibm.com>
  *
@@ -164,7 +164,7 @@ static int kvm_s390_modify_ais_mode(S390FLICState *fs, uint8_t isc,
         .addr = (uint64_t)&req,
     };
 
-    if (!fs->ais_supported) {
+    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
         return -ENOSYS;
     }
 
@@ -181,7 +181,7 @@ static int kvm_s390_inject_airq(S390FLICState *fs, uint8_t type,
         .attr = id,
     };
 
-    if (!fs->ais_supported) {
+    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
         return -ENOSYS;
     }
 
@@ -459,7 +459,7 @@ static int kvm_flic_ais_post_load(void *opaque, int version_id)
      * migration from a host that has AIS to a host that has no AIS.
      * In that case the target system will reject the migration here.
      */
-    if (!ais_needed(flic)) {
+    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
         return -ENOSYS;
     }
 
@@ -557,6 +557,12 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
     test_attr.group = KVM_DEV_FLIC_CLEAR_IO_IRQ;
     flic_state->clear_io_supported = !ioctl(flic_state->fd,
                                             KVM_HAS_DEVICE_ATTR, test_attr);
+    /* try enable the AIS facility */
+    test_attr.group = KVM_DEV_FLIC_AISM_ALL;
+    if (!ioctl(flic_state->fd, KVM_HAS_DEVICE_ATTR, test_attr)) {
+        kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_AIS, 0);
+    }
+
     return;
 fail:
     error_propagate(errp, errp_local);
@@ -578,7 +584,7 @@ static void kvm_s390_flic_reset(DeviceState *dev)
 
     flic_disable_wait_pfault(flic);
 
-    if (fs->ais_supported) {
+    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
         for (isc = 0; isc <= MAX_ISC; isc++) {
             rc = kvm_s390_modify_ais_mode(fs, isc, SIC_IRQ_MODE_ALL);
             if (rc) {
diff --git a/hw/s390x/css.c b/hw/s390x/css.c
index 75d4f30..1d4bb73 100644
--- a/hw/s390x/css.c
+++ b/hw/s390x/css.c
@@ -1,7 +1,7 @@
 /*
  * Channel subsystem base support.
  *
- * Copyright 2012 IBM Corp.
+ * Copyright IBM Corp. 2012, 2017
  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
  *
  * This work is licensed under the terms of the GNU GPL, version 2 or (at
@@ -672,7 +672,7 @@ void css_adapter_interrupt(CssIoAdapterType type, uint8_t isc)
     }
 
     trace_css_adapter_interrupt(isc);
-    if (fs->ais_supported) {
+    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
         if (fsc->inject_airq(fs, type, isc, adapter->flags)) {
             error_report("Failed to inject airq with AIS supported");
             exit(1);
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index fafbc6d..98c82c2 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -1,7 +1,7 @@
 /*
  * virtio ccw machine
  *
- * Copyright 2012 IBM Corp.
+ * Copyright IBM Corp. 2012, 2017
  * Copyright (c) 2009 Alexander Graf <agraf@suse.de>
  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
  *
@@ -279,11 +279,15 @@ static void ccw_init(MachineState *machine)
     s390_sclp_init();
     s390_memory_init(machine->ram_size);
 
+    /*
+     * This might also enable some KVM features like AIS, so it must
+     * be called before the CPU model
+     */
+    s390_flic_init();
+
     /* init CPUs (incl. CPU model) early so s390_has_feature() works */
     s390_init_cpus(machine);
 
-    s390_flic_init();
-
     /* get a BUS */
     css_bus = virtual_css_bus_init();
     s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline,
diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h
index 7aab6ef..75fd83c 100644
--- a/include/hw/s390x/s390_flic.h
+++ b/include/hw/s390x/s390_flic.h
@@ -44,7 +44,6 @@ typedef struct S390FLICState {
     SysBusDevice parent_obj;
     /* to limit AdapterRoutes.num_routes for compat */
     uint32_t adapter_routes_max_batch;
-    bool ais_supported;
 } S390FLICState;
 
 #define S390_FLIC_COMMON_CLASS(klass) \
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index ebb75ca..9ee2ada 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -2,7 +2,7 @@
  * QEMU S390x KVM implementation
  *
  * Copyright (c) 2009 Alexander Graf <agraf@suse.de>
- * Copyright IBM Corp. 2012
+ * Copyright IBM Corp. 2012, 2017
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -311,13 +311,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
         }
     }
 
-    /*
-     * The migration interface for ais was introduced with kernel 4.13
-     * but the capability itself had been active since 4.12. As migration
-     * support is considered necessary let's disable ais in the 2.10
-     * machine.
-     */
-    /* kvm_vm_enable_cap(s, KVM_CAP_S390_AIS, 0); */
+    /* The AIS enablement happens in the flic realize */
 
     qemu_mutex_init(&qemu_sigp_mutex);
 
-- 
2.9.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Qemu-devel] [PATCH v3 3/3] s390x/ais: disable ais for compat machines
  2017-09-27  7:20 [Qemu-devel] [PATCH v3 0/3] more ais fixups Christian Borntraeger
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1 Christian Borntraeger
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available Christian Borntraeger
@ 2017-09-27  7:20 ` Christian Borntraeger
  2 siblings, 0 replies; 8+ messages in thread
From: Christian Borntraeger @ 2017-09-27  7:20 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic,
	Christian Borntraeger, Dr. David Alan Gilbert

With newer kernels that do support the ais feature (4.13) a qemu 2.11
will not only enable the ais feature for the 2.11 machine, but also for
a <=2.10 compat machine. As this feature is not available in QEMU <=2.9
(and QEMU 2.10.1), this guest will fail to migrate back to an older qemu
like 2.9 with:

error while loading state for instance 0x0 of device 's390-flic'

making the whole compat machine dis-functional.  As a permanent fix, we
need to fence the ais feature for machines <= 2.10 similar to what we do
for guarded storage, runtime instrumentation and css migration.

Due to ais being enabled on 2.10.0 (fixed in 2.10.1) this will prevent
migration of ais-enabled guests from 2.10.0 with

qemu-system-s390x: Failed to load s390-flic/ais:tmp
qemu-system-s390x: error while loading state for instance 0x0 of device 's390-flic'
qemu-system-s390x: load of migration failed: Function not implemented

Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Yi Min Zhao <zyimin@linux.vnet.ibm.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/intc/s390_flic_kvm.c            |  4 +++-
 hw/s390x/s390-virtio-ccw.c         | 10 ++++++++++
 include/hw/s390x/s390-virtio-ccw.h |  3 +++
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
index 0a370a9..fddda2b 100644
--- a/hw/intc/s390_flic_kvm.c
+++ b/hw/intc/s390_flic_kvm.c
@@ -22,6 +22,7 @@
 #include "hw/s390x/s390_flic.h"
 #include "hw/s390x/adapter.h"
 #include "hw/s390x/css.h"
+#include "hw/s390x/s390-virtio-ccw.h"
 #include "trace.h"
 
 #define FLIC_SAVE_INITIAL_SIZE getpagesize()
@@ -559,7 +560,8 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
                                             KVM_HAS_DEVICE_ATTR, test_attr);
     /* try enable the AIS facility */
     test_attr.group = KVM_DEV_FLIC_AISM_ALL;
-    if (!ioctl(flic_state->fd, KVM_HAS_DEVICE_ATTR, test_attr)) {
+    if (ais_allowed() &&
+        !ioctl(flic_state->fd, KVM_HAS_DEVICE_ATTR, test_attr)) {
         kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_AIS, 0);
     }
 
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 98c82c2..41b770a 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -435,6 +435,7 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
     s390mc->cpu_model_allowed = true;
     s390mc->css_migration_enabled = true;
     s390mc->gs_allowed = true;
+    s390mc->ais_allowed = true;
     mc->init = ccw_init;
     mc->reset = s390_machine_reset;
     mc->hot_add_cpu = s390_hot_add_cpu;
@@ -519,6 +520,11 @@ bool gs_allowed(void)
     return get_machine_class()->gs_allowed;
 }
 
+bool ais_allowed(void)
+{
+    return get_machine_class()->ais_allowed;
+}
+
 static char *machine_get_loadparm(Object *obj, Error **errp)
 {
     S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
@@ -742,6 +748,10 @@ static void ccw_machine_2_10_instance_options(MachineState *machine)
 
 static void ccw_machine_2_10_class_options(MachineClass *mc)
 {
+    S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+
+    s390mc->ais_allowed = false;
+
     ccw_machine_2_11_class_options(mc);
     SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_10);
 }
diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h
index a9a90c2..d25a98f 100644
--- a/include/hw/s390x/s390-virtio-ccw.h
+++ b/include/hw/s390x/s390-virtio-ccw.h
@@ -41,6 +41,7 @@ typedef struct S390CcwMachineClass {
     bool cpu_model_allowed;
     bool css_migration_enabled;
     bool gs_allowed;
+    bool ais_allowed;
 } S390CcwMachineClass;
 
 /* runtime-instrumentation allowed by the machine */
@@ -49,6 +50,8 @@ bool ri_allowed(void);
 bool cpu_model_allowed(void);
 /* guarded-storage allowed by the machine */
 bool gs_allowed(void);
+/* ais allowed by the machine */
+bool ais_allowed(void);
 
 /**
  * Returns true if (vmstate based) migration of the channel subsystem
-- 
2.9.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1 Christian Borntraeger
@ 2017-09-27  9:12   ` Cornelia Huck
  0 siblings, 0 replies; 8+ messages in thread
From: Cornelia Huck @ 2017-09-27  9:12 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic

On Wed, 27 Sep 2017 09:20:28 +0200
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> We disabled ais for 2.10 lets also remove it from the z14 default model.

s/lets/, so let's/

> 
> Fixes: 3f2d07b3b01e  s390x/ais: for 2.10 stable: disable ais facility
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> ---
>  target/s390x/gen-features.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
> index c8dc104..68e6c31 100644
> --- a/target/s390x/gen-features.c
> +++ b/target/s390x/gen-features.c
> @@ -527,7 +527,6 @@ static uint16_t default_GEN13_GA1[] = {
>  #define default_GEN13_GA2 EmptyFeat
>  
>  static uint16_t default_GEN14_GA1[] = {
> -    S390_FEAT_ADAPTER_INT_SUPPRESSION,
>      S390_FEAT_INSTRUCTION_EXEC_PROT,
>      S390_FEAT_GUARDED_STORAGE,
>      S390_FEAT_VECTOR_PACKED_DECIMAL,

Thanks, fixed description and applied to s390-fixes.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available Christian Borntraeger
@ 2017-09-28 14:42   ` Cornelia Huck
  2017-09-29  8:12   ` Christian Borntraeger
  1 sibling, 0 replies; 8+ messages in thread
From: Cornelia Huck @ 2017-09-28 14:42 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic

On Wed, 27 Sep 2017 09:20:29 +0200
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> Instead of unconditionally enabling the KVM AIS capability
> in the kvm arch init function, do this in the flic realize function
> when we know if migration is available. This requires to initialize
> flic before the CPUs (and cpu models).
> 
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Reviewed-by: David Hildenbrand <david@redhat.com>
> ---
>  hw/intc/s390_flic.c          |  8 ++------
>  hw/intc/s390_flic_kvm.c      | 16 +++++++++++-----
>  hw/s390x/css.c               |  4 ++--
>  hw/s390x/s390-virtio-ccw.c   | 10 +++++++---
>  include/hw/s390x/s390_flic.h |  1 -
>  target/s390x/kvm.c           | 10 ++--------
>  6 files changed, 24 insertions(+), 25 deletions(-)

Thanks, applied.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available
  2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available Christian Borntraeger
  2017-09-28 14:42   ` Cornelia Huck
@ 2017-09-29  8:12   ` Christian Borntraeger
  2017-09-29  8:25     ` Cornelia Huck
  1 sibling, 1 reply; 8+ messages in thread
From: Christian Borntraeger @ 2017-09-29  8:12 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic

Conny can you maybe defer this patch?

Turns out that this patch will enable the ais feature, so you can do -cpu z13,ais=on,
but it will not enable ais for the none machine
That means that libvirt will not enable ais for host-model or host-passthrough.

Reason seems to be that the flic interrupt controller is not created when the
none machine is used.

On 09/27/2017 09:20 AM, Christian Borntraeger wrote:
> Instead of unconditionally enabling the KVM AIS capability
> in the kvm arch init function, do this in the flic realize function
> when we know if migration is available. This requires to initialize
> flic before the CPUs (and cpu models).
> 
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Reviewed-by: David Hildenbrand <david@redhat.com>
> ---
>  hw/intc/s390_flic.c          |  8 ++------
>  hw/intc/s390_flic_kvm.c      | 16 +++++++++++-----
>  hw/s390x/css.c               |  4 ++--
>  hw/s390x/s390-virtio-ccw.c   | 10 +++++++---
>  include/hw/s390x/s390_flic.h |  1 -
>  target/s390x/kvm.c           | 10 ++--------
>  6 files changed, 24 insertions(+), 25 deletions(-)
> 
> diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
> index 6eaf178..9858f0e 100644
> --- a/hw/intc/s390_flic.c
> +++ b/hw/intc/s390_flic.c
> @@ -1,7 +1,7 @@
>  /*
>   * QEMU S390x floating interrupt controller (flic)
>   *
> - * Copyright 2014 IBM Corp.
> + * Copyright IBM Corp. 2014, 2017
>   * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
>   *            Cornelia Huck <cornelia.huck@de.ibm.com>
>   *
> @@ -136,9 +136,7 @@ static void qemu_s390_flic_reset(DeviceState *dev)
> 
>  bool ais_needed(void *opaque)
>  {
> -    S390FLICState *s = opaque;
> -
> -    return s->ais_supported;
> +    return s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);
>  }
> 
>  static const VMStateDescription qemu_s390_flic_vmstate = {
> @@ -185,8 +183,6 @@ static void s390_flic_common_realize(DeviceState *dev, Error **errp)
>                     " (%d > %d)", max_batch, ADAPTER_ROUTES_MAX_GSI);
>          return;
>      }
> -
> -    fs->ais_supported = s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);
>  }
> 
>  static void s390_flic_class_init(ObjectClass *oc, void *data)
> diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
> index 7ead17a..0a370a9 100644
> --- a/hw/intc/s390_flic_kvm.c
> +++ b/hw/intc/s390_flic_kvm.c
> @@ -1,7 +1,7 @@
>  /*
>   * QEMU S390x KVM floating interrupt controller (flic)
>   *
> - * Copyright 2014 IBM Corp.
> + * Copyright IBM Corp. 2014, 2017
>   * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>
>   *            Cornelia Huck <cornelia.huck@de.ibm.com>
>   *
> @@ -164,7 +164,7 @@ static int kvm_s390_modify_ais_mode(S390FLICState *fs, uint8_t isc,
>          .addr = (uint64_t)&req,
>      };
> 
> -    if (!fs->ais_supported) {
> +    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          return -ENOSYS;
>      }
> 
> @@ -181,7 +181,7 @@ static int kvm_s390_inject_airq(S390FLICState *fs, uint8_t type,
>          .attr = id,
>      };
> 
> -    if (!fs->ais_supported) {
> +    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          return -ENOSYS;
>      }
> 
> @@ -459,7 +459,7 @@ static int kvm_flic_ais_post_load(void *opaque, int version_id)
>       * migration from a host that has AIS to a host that has no AIS.
>       * In that case the target system will reject the migration here.
>       */
> -    if (!ais_needed(flic)) {
> +    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          return -ENOSYS;
>      }
> 
> @@ -557,6 +557,12 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)
>      test_attr.group = KVM_DEV_FLIC_CLEAR_IO_IRQ;
>      flic_state->clear_io_supported = !ioctl(flic_state->fd,
>                                              KVM_HAS_DEVICE_ATTR, test_attr);
> +    /* try enable the AIS facility */
> +    test_attr.group = KVM_DEV_FLIC_AISM_ALL;
> +    if (!ioctl(flic_state->fd, KVM_HAS_DEVICE_ATTR, test_attr)) {
> +        kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_AIS, 0);
> +    }
> +
>      return;
>  fail:
>      error_propagate(errp, errp_local);
> @@ -578,7 +584,7 @@ static void kvm_s390_flic_reset(DeviceState *dev)
> 
>      flic_disable_wait_pfault(flic);
> 
> -    if (fs->ais_supported) {
> +    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          for (isc = 0; isc <= MAX_ISC; isc++) {
>              rc = kvm_s390_modify_ais_mode(fs, isc, SIC_IRQ_MODE_ALL);
>              if (rc) {
> diff --git a/hw/s390x/css.c b/hw/s390x/css.c
> index 75d4f30..1d4bb73 100644
> --- a/hw/s390x/css.c
> +++ b/hw/s390x/css.c
> @@ -1,7 +1,7 @@
>  /*
>   * Channel subsystem base support.
>   *
> - * Copyright 2012 IBM Corp.
> + * Copyright IBM Corp. 2012, 2017
>   * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
>   *
>   * This work is licensed under the terms of the GNU GPL, version 2 or (at
> @@ -672,7 +672,7 @@ void css_adapter_interrupt(CssIoAdapterType type, uint8_t isc)
>      }
> 
>      trace_css_adapter_interrupt(isc);
> -    if (fs->ais_supported) {
> +    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {
>          if (fsc->inject_airq(fs, type, isc, adapter->flags)) {
>              error_report("Failed to inject airq with AIS supported");
>              exit(1);
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index fafbc6d..98c82c2 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -1,7 +1,7 @@
>  /*
>   * virtio ccw machine
>   *
> - * Copyright 2012 IBM Corp.
> + * Copyright IBM Corp. 2012, 2017
>   * Copyright (c) 2009 Alexander Graf <agraf@suse.de>
>   * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>
>   *
> @@ -279,11 +279,15 @@ static void ccw_init(MachineState *machine)
>      s390_sclp_init();
>      s390_memory_init(machine->ram_size);
> 
> +    /*
> +     * This might also enable some KVM features like AIS, so it must
> +     * be called before the CPU model
> +     */
> +    s390_flic_init();
> +
>      /* init CPUs (incl. CPU model) early so s390_has_feature() works */
>      s390_init_cpus(machine);
> 
> -    s390_flic_init();
> -
>      /* get a BUS */
>      css_bus = virtual_css_bus_init();
>      s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline,
> diff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h
> index 7aab6ef..75fd83c 100644
> --- a/include/hw/s390x/s390_flic.h
> +++ b/include/hw/s390x/s390_flic.h
> @@ -44,7 +44,6 @@ typedef struct S390FLICState {
>      SysBusDevice parent_obj;
>      /* to limit AdapterRoutes.num_routes for compat */
>      uint32_t adapter_routes_max_batch;
> -    bool ais_supported;
>  } S390FLICState;
> 
>  #define S390_FLIC_COMMON_CLASS(klass) \
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index ebb75ca..9ee2ada 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -2,7 +2,7 @@
>   * QEMU S390x KVM implementation
>   *
>   * Copyright (c) 2009 Alexander Graf <agraf@suse.de>
> - * Copyright IBM Corp. 2012
> + * Copyright IBM Corp. 2012, 2017
>   *
>   * This library is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU Lesser General Public
> @@ -311,13 +311,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
>          }
>      }
> 
> -    /*
> -     * The migration interface for ais was introduced with kernel 4.13
> -     * but the capability itself had been active since 4.12. As migration
> -     * support is considered necessary let's disable ais in the 2.10
> -     * machine.
> -     */
> -    /* kvm_vm_enable_cap(s, KVM_CAP_S390_AIS, 0); */
> +    /* The AIS enablement happens in the flic realize */
> 
>      qemu_mutex_init(&qemu_sigp_mutex);
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available
  2017-09-29  8:12   ` Christian Borntraeger
@ 2017-09-29  8:25     ` Cornelia Huck
  0 siblings, 0 replies; 8+ messages in thread
From: Cornelia Huck @ 2017-09-29  8:25 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: qemu-devel, Alexander Graf, Thomas Huth, David Hildenbrand,
	Richard Henderson, Michael Roth, Yi Min Zhao, Halil Pasic

On Fri, 29 Sep 2017 10:12:43 +0200
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> Conny can you maybe defer this patch?
> 
> Turns out that this patch will enable the ais feature, so you can do -cpu z13,ais=on,
> but it will not enable ais for the none machine
> That means that libvirt will not enable ais for host-model or host-passthrough.
> 
> Reason seems to be that the flic interrupt controller is not created when the
> none machine is used.

Sigh :( Things are never easy...

I'll dequeue this again, thanks.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-09-29  8:25 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-27  7:20 [Qemu-devel] [PATCH v3 0/3] more ais fixups Christian Borntraeger
2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 1/3] s390x/cpumodel: remove ais from z14 default model-> also for 2.10.1 Christian Borntraeger
2017-09-27  9:12   ` Cornelia Huck
2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 2/3] s390x/ais: enable ais when migration is available Christian Borntraeger
2017-09-28 14:42   ` Cornelia Huck
2017-09-29  8:12   ` Christian Borntraeger
2017-09-29  8:25     ` Cornelia Huck
2017-09-27  7:20 ` [Qemu-devel] [PATCH v3 3/3] s390x/ais: disable ais for compat machines Christian Borntraeger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.