From patchwork Thu Jan 24 12:59:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Mueller X-Patchwork-Id: 10778895 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1E52E746 for ; Thu, 24 Jan 2019 13:00:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 50EB52EA2F for ; Thu, 24 Jan 2019 13:00:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3DEB72EAB1; Thu, 24 Jan 2019 13:00:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 82D122EA2F for ; Thu, 24 Jan 2019 13:00:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727657AbfAXNAC (ORCPT ); Thu, 24 Jan 2019 08:00:02 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:50142 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727556AbfAXNAC (ORCPT ); Thu, 24 Jan 2019 08:00:02 -0500 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x0OCsTir135573 for ; Thu, 24 Jan 2019 08:00:01 -0500 Received: from e06smtp03.uk.ibm.com (e06smtp03.uk.ibm.com [195.75.94.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 2q7c21dwyd-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 24 Jan 2019 08:00:01 -0500 Received: from localhost by e06smtp03.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 24 Jan 2019 12:59:58 -0000 Received: from b06cxnps4075.portsmouth.uk.ibm.com (9.149.109.197) by e06smtp03.uk.ibm.com (192.168.101.133) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Thu, 24 Jan 2019 12:59:56 -0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id x0OCxs2u6619578 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 24 Jan 2019 12:59:54 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 74A685204F; Thu, 24 Jan 2019 12:59:54 +0000 (GMT) Received: from s38lp84.lnxne.boe (unknown [9.152.108.100]) by d06av21.portsmouth.uk.ibm.com (Postfix) with ESMTP id 20A6E52051; Thu, 24 Jan 2019 12:59:54 +0000 (GMT) From: Michael Mueller To: KVM Mailing List Cc: Linux-S390 Mailing List , linux-kernel@vger.kernel.org, Martin Schwidefsky , Heiko Carstens , Christian Borntraeger , Janosch Frank , David Hildenbrand , Cornelia Huck , Halil Pasic , Pierre Morel , Michael Mueller Subject: [PATCH v6 00/13] KVM: s390: make use of the GIB Date: Thu, 24 Jan 2019 13:59:26 +0100 X-Mailer: git-send-email 2.13.4 X-TM-AS-GCONF: 00 x-cbid: 19012412-0012-0000-0000-000002EC5DB8 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 19012412-0013-0000-0000-000021239156 Message-Id: <20190124125939.130763-1-mimu@linux.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-01-24_07:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1901240095 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The Guest Information Area (GIB) and its mechanics is part of the AIV facility. It provides hardware support to process Adapter Interruptions (AI) for pagable storage mode guests. Whenever a guest cannot process an AI because none of its vcpus is running in SIE context, a GIB alert interruption is sent to and handled by the host program to dispatch a vcpu of the respective guest. Eventually, the AI is handled by the guest. v5->v6: Futher significant change was introduced with this version now: a) During the alert list processing now a hrtimer is started to kick an idle vcpu with open I/O interrupt mask. It then is restarted to monitor the interruption consumption and when the IPM is clean (no relevant ISCs pending anymore) atomically restores the IAM and don't restarts or if new ISCs arrive kick other idle vcpus. patches 1/13 to 7/13: prepare the existing Interruption and GISA code for the introduction of the GIB code. patches 8/13 to 10/13: kept from v5. patch 11/13: Some comments added. patch 12/13: Significatly changed due to the hrtimer control. patch 13/13: Basically kept from v5 except for a slight reordering that shortens the patch. v4->v5: Between these two versions some significant change was introduced: a) During IPM look-up, the IAM gets atomically restored if the IPM is clean. (The main strategy is: As soon no airqs are pending anymore, get prepared for new ones arriving). b) Kick a set of vcpus in WAIT state, that will be able to handle all ISCs in IPM if possible. The main loop that processes the GIB alert list is unchanged. patches 1/15 to 6/15: prepare the existing Interruption and GISA code for the introduction of the GIB code. patches 7/15 to 9/15: kept from v4. patch 10/15: restores the IAM in get_ipm() when clean on request with additional parameter irq_flags patch 12/15: modifies kvm_s390_deliver_pending_interrupts() such that the IAM is not restored during the deliverable_irqs() test as we are about to enter the SIE. Restoring the IAM would trigger the alert mechanism unnecessarily on SIE entry. patch 13/15: process_gib_alert_list() now triggers a minimal set of idle vcpus capable the handle all pending ISCs. patch 14/15: the wiring is logical similar to v4 but uses different routines patch 15/15: kept from v4. v3->v4: The central change of v4 is that the metric "vcpus_in_sie" has been dropped. A least agressive IAM restore strategy is being followed now. The consequence is that potentially more GAL interruptions are to be handled by the host program. The assuption as made that as soon the first vcpu is trying to go into wait state, this could be the last vcpu being open for I/O interruptions. Thus, to not loose the initiative to deliver I/O interruptions as soon as possible, the IAM is restored. Adding better heuristics can be done in future. I expect this to be the last version of the series. patch 01/12: Kernel msg now printed when FLIC fails to register during arch inititialization. patch 03/12: Commit message slightly changed with the hint that gib initialization is called by last patch of this serias. patch 09/12: IAM now restored during kvm_s390_handle_wait() patch 10/12: gib destroy case now handled upon unsuccessful arch inititialization. All other patches are unchanged. v2->v3: patch 01/12: Fixes a resource dealocation issue upon unsuccessful exit from kvm_arch_init(). It is relevant for patch 11/12 as well. patch 08/12: The function process_gib_alert_list() has been rewritten to reduce the number of GAL interruptions on the host for many guest scenarios. patch 10/12: The IAM is now never cleared before SIE entry. It will be cleared by millicode as soon the first guest interruption is made pending and not directly processed in SIE. The IAM gets restored as soon a vm is idle, i.e. no vcpu of that guest is in SIE context anymore. patch 11/12: now integrates with new patch 01/12 patch 12/12: This patch is just experimental and shall not be part of the final series. The first patch of series v2: "leave AIs in IPM of GISA during vcpu_pre_run()" has been dropped. All other patches are unchanged. v1->v2: patch 01/12: New patch. Tt can go also standalone without the rest of the GIB series presented here but is a requirement patch 03/12: kvm_s390_gib_init() now has a return code patch 06/12: unlink_gib_alert_list() now uses cmpxchg() instead of atomic_xchg() patch 08/12: New patch. Foctors out __find_vcpu_for_floating_irq() patch 09/12: process_gib_alert_list() has been simplified the GISA clear/destroy cases have been removed patch 11/12: kvm_s390_gisa_clear/destroy() now clear the IAM and process the alert list directly The IAM now gets restored in vcpu_post_run() only if the GISA is not in alert list patch 12/12: during kvm_arch_init() now the return code of kvm_s390_gib_init() is honored. All other patches are unchanged. Michael Mueller (13): KVM: s390: drop obsolete else path KVM: s390: make bitmap declaration consitent KVM: s390: move bitmap idle_mask into arch struct top level KVM: s390: coding style kvm_s390_gisa_init/clear() KVM: s390: use pending_irqs_no_gisa() where appropriate KVM: s390: remove kvm_s390_ from gisa static inline functions KVM: s390: introduce struct kvm_s390_gisa_interrupt s390/cio: add function chsc_sgib() KVM: s390: add the GIB and its related life-cyle functions KVM: s390: add kvm reference to struct sie_page2 KVM: s390: add functions to (un)register GISC with GISA KVM: s390: add gib_alert_irq_handler() KVM: s390: start using the GIB arch/s390/include/asm/cio.h | 1 + arch/s390/include/asm/irq.h | 1 + arch/s390/include/asm/isc.h | 1 + arch/s390/include/asm/kvm_host.h | 36 +++- arch/s390/kernel/irq.c | 1 + arch/s390/kvm/interrupt.c | 422 +++++++++++++++++++++++++++++++++++---- arch/s390/kvm/kvm-s390.c | 13 +- arch/s390/kvm/kvm-s390.h | 4 +- drivers/s390/cio/chsc.c | 37 ++++ drivers/s390/cio/chsc.h | 1 + 10 files changed, 472 insertions(+), 45 deletions(-)