{"id":818645,"url":"http://patchwork.ozlabs.org/api/patches/818645/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170926133624.155394-2-borntraeger@de.ibm.com/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20170926133624.155394-2-borntraeger@de.ibm.com>","list_archive_url":null,"date":"2017-09-26T13:36:23","name":"[v2,1/2] s390x/ais: enable ais when migration is available","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"5102af89c6b4da27a9275c792e749dd89bbd4398","submitter":{"id":590,"url":"http://patchwork.ozlabs.org/api/people/590/?format=json","name":"Christian Borntraeger","email":"borntraeger@de.ibm.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20170926133624.155394-2-borntraeger@de.ibm.com/mbox/","series":[{"id":5143,"url":"http://patchwork.ozlabs.org/api/series/5143/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=5143","date":"2017-09-26T13:36:23","name":"ais fixups for 2.11","version":2,"mbox":"http://patchwork.ozlabs.org/series/5143/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/818645/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/818645/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3y1hpC0xrGz9tXq\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 26 Sep 2017 23:37:23 +1000 (AEST)","from localhost ([::1]:47592 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dwq37-0005ub-7L\n\tfor incoming@patchwork.ozlabs.org; Tue, 26 Sep 2017 09:37:21 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:48990)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <borntraeger@de.ibm.com>) id 1dwq2T-0005pu-3M\n\tfor qemu-devel@nongnu.org; Tue, 26 Sep 2017 09:36:47 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <borntraeger@de.ibm.com>) id 1dwq2P-0007WD-Sb\n\tfor qemu-devel@nongnu.org; Tue, 26 Sep 2017 09:36:41 -0400","from mx0a-001b2d01.pphosted.com ([148.163.156.1]:51778)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <borntraeger@de.ibm.com>)\n\tid 1dwq2P-0007Va-Ik\n\tfor qemu-devel@nongnu.org; Tue, 26 Sep 2017 09:36:37 -0400","from pps.filterd (m0098410.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv8QDZkUr139470\n\tfor <qemu-devel@nongnu.org>; Tue, 26 Sep 2017 09:36:33 -0400","from e06smtp15.uk.ibm.com (e06smtp15.uk.ibm.com [195.75.94.111])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2d7mpaxeds-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <qemu-devel@nongnu.org>; Tue, 26 Sep 2017 09:36:32 -0400","from localhost\n\tby e06smtp15.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <qemu-devel@nongnu.org> from <borntraeger@de.ibm.com>;\n\tTue, 26 Sep 2017 14:36:29 +0100","from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194)\n\tby e06smtp15.uk.ibm.com (192.168.101.145) with IBM ESMTP SMTP\n\tGateway: Authorized Use Only! Violators will be prosecuted; \n\tTue, 26 Sep 2017 14:36:26 +0100","from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com\n\t[9.149.105.59])\n\tby b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with\n\tESMTP id v8QDaPwn22151290; Tue, 26 Sep 2017 13:36:25 GMT","from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id ABDF1A4051;\n\tTue, 26 Sep 2017 14:32:18 +0100 (BST)","from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1])\n\tby IMSVA (Postfix) with ESMTP id 96294A4040;\n\tTue, 26 Sep 2017 14:32:18 +0100 (BST)","from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9])\n\tby d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTPS;\n\tTue, 26 Sep 2017 14:32:18 +0100 (BST)","by tuxmaker.boeblingen.de.ibm.com (Postfix, from userid 25651)\n\tid 444B820F62D; Tue, 26 Sep 2017 15:36:25 +0200 (CEST)"],"From":"Christian Borntraeger <borntraeger@de.ibm.com>","To":"Cornelia Huck <cohuck@redhat.com>","Date":"Tue, 26 Sep 2017 15:36:23 +0200","X-Mailer":"git-send-email 2.9.4","In-Reply-To":"<20170926133624.155394-1-borntraeger@de.ibm.com>","References":"<20170926133624.155394-1-borntraeger@de.ibm.com>","X-TM-AS-GCONF":"00","x-cbid":"17092613-0020-0000-0000-000003BB39C6","X-IBM-AV-DETECTION":"SAVI=unused REMOTE=unused XFE=unused","x-cbparentid":"17092613-0021-0000-0000-0000424D14A3","Message-Id":"<20170926133624.155394-2-borntraeger@de.ibm.com>","X-Proofpoint-Virus-Version":"vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-09-26_05:, , signatures=0","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1709260197","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 3.x [generic] [fuzzy]","X-Received-From":"148.163.156.1","Subject":"[Qemu-devel] [PATCH v2 1/2] s390x/ais: enable ais when migration is\n\tavailable","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"Halil Pasic <pasic@linux.vnet.ibm.com>,\n\tYi Min Zhao <zyimin@linux.vnet.ibm.com>,\n\tDavid Hildenbrand <david@redhat.com>,\n\tqemu-devel <qemu-devel@nongnu.org>, Alexander Graf <agraf@suse.de>,\n\tChristian Borntraeger <borntraeger@de.ibm.com>,\n\t\"Jason J . Herne\" <jjherne@linux.vnet.ibm.com>,\n\tRichard Henderson <rth@twiddle.net>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"},"content":"Instead of unconditionally enabling the KVM AIS capability\nin the kvm arch init function, do this in the flic realize function\nwhen we know if migration is available. This requires to initialize\nflic before the CPUs.\n\nSigned-off-by: Christian Borntraeger <borntraeger@de.ibm.com>\n---\n hw/intc/s390_flic.c          |  8 ++------\n hw/intc/s390_flic_kvm.c      | 16 +++++++++++-----\n hw/s390x/css.c               |  4 ++--\n hw/s390x/s390-virtio-ccw.c   | 10 +++++++---\n include/hw/s390x/s390_flic.h |  1 -\n target/s390x/kvm.c           | 10 ++--------\n 6 files changed, 24 insertions(+), 25 deletions(-)","diff":"diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c\nindex 6eaf178..9858f0e 100644\n--- a/hw/intc/s390_flic.c\n+++ b/hw/intc/s390_flic.c\n@@ -1,7 +1,7 @@\n /*\n  * QEMU S390x floating interrupt controller (flic)\n  *\n- * Copyright 2014 IBM Corp.\n+ * Copyright IBM Corp. 2014, 2017\n  * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>\n  *            Cornelia Huck <cornelia.huck@de.ibm.com>\n  *\n@@ -136,9 +136,7 @@ static void qemu_s390_flic_reset(DeviceState *dev)\n \n bool ais_needed(void *opaque)\n {\n-    S390FLICState *s = opaque;\n-\n-    return s->ais_supported;\n+    return s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);\n }\n \n static const VMStateDescription qemu_s390_flic_vmstate = {\n@@ -185,8 +183,6 @@ static void s390_flic_common_realize(DeviceState *dev, Error **errp)\n                    \" (%d > %d)\", max_batch, ADAPTER_ROUTES_MAX_GSI);\n         return;\n     }\n-\n-    fs->ais_supported = s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION);\n }\n \n static void s390_flic_class_init(ObjectClass *oc, void *data)\ndiff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c\nindex 7ead17a..5c9d215 100644\n--- a/hw/intc/s390_flic_kvm.c\n+++ b/hw/intc/s390_flic_kvm.c\n@@ -1,7 +1,7 @@\n /*\n  * QEMU S390x KVM floating interrupt controller (flic)\n  *\n- * Copyright 2014 IBM Corp.\n+ * Copyright IBM Corp. 2014, 2017\n  * Author(s): Jens Freimann <jfrei@linux.vnet.ibm.com>\n  *            Cornelia Huck <cornelia.huck@de.ibm.com>\n  *\n@@ -164,7 +164,7 @@ static int kvm_s390_modify_ais_mode(S390FLICState *fs, uint8_t isc,\n         .addr = (uint64_t)&req,\n     };\n \n-    if (!fs->ais_supported) {\n+    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {\n         return -ENOSYS;\n     }\n \n@@ -181,7 +181,7 @@ static int kvm_s390_inject_airq(S390FLICState *fs, uint8_t type,\n         .attr = id,\n     };\n \n-    if (!fs->ais_supported) {\n+    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {\n         return -ENOSYS;\n     }\n \n@@ -459,7 +459,7 @@ static int kvm_flic_ais_post_load(void *opaque, int version_id)\n      * migration from a host that has AIS to a host that has no AIS.\n      * In that case the target system will reject the migration here.\n      */\n-    if (!ais_needed(flic)) {\n+    if (!s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {\n         return -ENOSYS;\n     }\n \n@@ -557,6 +557,12 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error **errp)\n     test_attr.group = KVM_DEV_FLIC_CLEAR_IO_IRQ;\n     flic_state->clear_io_supported = !ioctl(flic_state->fd,\n                                             KVM_HAS_DEVICE_ATTR, test_attr);\n+    /* try enable the AIS facility */\n+    test_attr.group = KVM_DEV_FLIC_AISM_ALL;\n+    if (!ioctl(flic_state->fd, KVM_HAS_DEVICE_ATTR, test_attr)) {\n+            kvm_vm_enable_cap(kvm_state, KVM_CAP_S390_AIS, 0);\n+    }\n+\n     return;\n fail:\n     error_propagate(errp, errp_local);\n@@ -578,7 +584,7 @@ static void kvm_s390_flic_reset(DeviceState *dev)\n \n     flic_disable_wait_pfault(flic);\n \n-    if (fs->ais_supported) {\n+    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {\n         for (isc = 0; isc <= MAX_ISC; isc++) {\n             rc = kvm_s390_modify_ais_mode(fs, isc, SIC_IRQ_MODE_ALL);\n             if (rc) {\ndiff --git a/hw/s390x/css.c b/hw/s390x/css.c\nindex 75d4f30..1d4bb73 100644\n--- a/hw/s390x/css.c\n+++ b/hw/s390x/css.c\n@@ -1,7 +1,7 @@\n /*\n  * Channel subsystem base support.\n  *\n- * Copyright 2012 IBM Corp.\n+ * Copyright IBM Corp. 2012, 2017\n  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>\n  *\n  * This work is licensed under the terms of the GNU GPL, version 2 or (at\n@@ -672,7 +672,7 @@ void css_adapter_interrupt(CssIoAdapterType type, uint8_t isc)\n     }\n \n     trace_css_adapter_interrupt(isc);\n-    if (fs->ais_supported) {\n+    if (s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION)) {\n         if (fsc->inject_airq(fs, type, isc, adapter->flags)) {\n             error_report(\"Failed to inject airq with AIS supported\");\n             exit(1);\ndiff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c\nindex fafbc6d..98c82c2 100644\n--- a/hw/s390x/s390-virtio-ccw.c\n+++ b/hw/s390x/s390-virtio-ccw.c\n@@ -1,7 +1,7 @@\n /*\n  * virtio ccw machine\n  *\n- * Copyright 2012 IBM Corp.\n+ * Copyright IBM Corp. 2012, 2017\n  * Copyright (c) 2009 Alexander Graf <agraf@suse.de>\n  * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com>\n  *\n@@ -279,11 +279,15 @@ static void ccw_init(MachineState *machine)\n     s390_sclp_init();\n     s390_memory_init(machine->ram_size);\n \n+    /*\n+     * This might also enable some KVM features like AIS, so it must\n+     * be called before the CPU model\n+     */\n+    s390_flic_init();\n+\n     /* init CPUs (incl. CPU model) early so s390_has_feature() works */\n     s390_init_cpus(machine);\n \n-    s390_flic_init();\n-\n     /* get a BUS */\n     css_bus = virtual_css_bus_init();\n     s390_init_ipl_dev(machine->kernel_filename, machine->kernel_cmdline,\ndiff --git a/include/hw/s390x/s390_flic.h b/include/hw/s390x/s390_flic.h\nindex 7aab6ef..75fd83c 100644\n--- a/include/hw/s390x/s390_flic.h\n+++ b/include/hw/s390x/s390_flic.h\n@@ -44,7 +44,6 @@ typedef struct S390FLICState {\n     SysBusDevice parent_obj;\n     /* to limit AdapterRoutes.num_routes for compat */\n     uint32_t adapter_routes_max_batch;\n-    bool ais_supported;\n } S390FLICState;\n \n #define S390_FLIC_COMMON_CLASS(klass) \\\ndiff --git a/target/s390x/kvm.c b/target/s390x/kvm.c\nindex ebb75ca..9ee2ada 100644\n--- a/target/s390x/kvm.c\n+++ b/target/s390x/kvm.c\n@@ -2,7 +2,7 @@\n  * QEMU S390x KVM implementation\n  *\n  * Copyright (c) 2009 Alexander Graf <agraf@suse.de>\n- * Copyright IBM Corp. 2012\n+ * Copyright IBM Corp. 2012, 2017\n  *\n  * This library is free software; you can redistribute it and/or\n  * modify it under the terms of the GNU Lesser General Public\n@@ -311,13 +311,7 @@ int kvm_arch_init(MachineState *ms, KVMState *s)\n         }\n     }\n \n-    /*\n-     * The migration interface for ais was introduced with kernel 4.13\n-     * but the capability itself had been active since 4.12. As migration\n-     * support is considered necessary let's disable ais in the 2.10\n-     * machine.\n-     */\n-    /* kvm_vm_enable_cap(s, KVM_CAP_S390_AIS, 0); */\n+    /* The AIS enablement happens in the flic realize */\n \n     qemu_mutex_init(&qemu_sigp_mutex);\n \n","prefixes":["v2","1/2"]}