From patchwork Wed Oct 4 13:49:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pierre Morel X-Patchwork-Id: 9984751 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 874AF60237 for ; Wed, 4 Oct 2017 13:53:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7BDBF285B5 for ; Wed, 4 Oct 2017 13:53:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7062A28AC1; Wed, 4 Oct 2017 13:53:11 +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=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 14431285B5 for ; Wed, 4 Oct 2017 13:53:11 +0000 (UTC) Received: from localhost ([::1]:35313 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzk6n-00080I-RP for patchwork-qemu-devel@patchwork.kernel.org; Wed, 04 Oct 2017 09:53:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55446) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dzk3h-00066Y-Ec for qemu-devel@nongnu.org; Wed, 04 Oct 2017 09:49:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dzk3d-0003mN-HF for qemu-devel@nongnu.org; Wed, 04 Oct 2017 09:49:57 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:51436) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dzk3d-0003ko-8d for qemu-devel@nongnu.org; Wed, 04 Oct 2017 09:49:53 -0400 Received: from pps.filterd (m0098393.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id v94DmxuZ103723 for ; Wed, 4 Oct 2017 09:49:52 -0400 Received: from e06smtp13.uk.ibm.com (e06smtp13.uk.ibm.com [195.75.94.109]) by mx0a-001b2d01.pphosted.com with ESMTP id 2dcyrhmd23-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Wed, 04 Oct 2017 09:49:51 -0400 Received: from localhost by e06smtp13.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 4 Oct 2017 14:49:49 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (9.149.109.195) by e06smtp13.uk.ibm.com (192.168.101.143) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Wed, 4 Oct 2017 14:49:46 +0100 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v94DnjlN29950124; Wed, 4 Oct 2017 13:49:45 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B41534C046; Wed, 4 Oct 2017 14:45:51 +0100 (BST) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 718EC4C044; Wed, 4 Oct 2017 14:45:51 +0100 (BST) Received: from morel-ThinkPad-W530.boeblingen.de.ibm.com (unknown [9.145.179.43]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Wed, 4 Oct 2017 14:45:51 +0100 (BST) From: Pierre Morel To: qemu-devel@nongnu.org Date: Wed, 4 Oct 2017 15:49:38 +0200 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1507124979-8880-1-git-send-email-pmorel@linux.vnet.ibm.com> References: <1507124979-8880-1-git-send-email-pmorel@linux.vnet.ibm.com> X-TM-AS-GCONF: 00 x-cbid: 17100413-0012-0000-0000-0000057E63C9 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17100413-0013-0000-0000-000018F7D2A5 Message-Id: <1507124979-8880-5-git-send-email-pmorel@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-10-04_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000 definitions=main-1710040194 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 v1 4/5] s390x/pci: Refuse to realize VFIO-PCI if AIS needed but supported X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: borntraeger@de.ibm.com, pasic@linux.vnet.ibm.com, cohuck@redhat.com, zyimin@linux.vnet.ibm.com, agraf@suse.de Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP In S390x the Adapter Interrupt Suppression facility is used to mask interrupts of other PCI devices during interruption handling. VFIO PCI allows the interrupts to be delivered rapidely through KVM via IRQfd or to be delivered through QEMU. The choice is made through the x-kvm-intx and x-kvo-misx properties of the VFIO PCI device. If the VFIO PCI device is using the direct KVM access through IRQfd and we know that KVM does not implement AIS support we refuse to realize the VFIO PCI device. In all other cases, emulation and VFIO PCI sending interrupts through QEMU, we intercept the propagated IRQ, and protect it with the QEMU AIS implementation before to send it to the guest through KVM. Signed-off-by: Pierre Morel --- hw/s390x/s390-pci-bus.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c index d9c294a..4afe49b 100644 --- a/hw/s390x/s390-pci-bus.c +++ b/hw/s390x/s390-pci-bus.c @@ -21,18 +21,21 @@ #include "hw/pci/pci_bus.h" #include "hw/pci/pci_bridge.h" #include "hw/pci/msi.h" +#include "hw/vfio/pci.h" #include "qemu/error-report.h" #ifndef DEBUG_S390PCI_BUS #define DEBUG_S390PCI_BUS 0 #endif +#ifndef DPRINTF #define DPRINTF(fmt, ...) \ do { \ if (DEBUG_S390PCI_BUS) { \ fprintf(stderr, "S390pci-bus: " fmt, ## __VA_ARGS__); \ } \ } while (0) +#endif S390pciState *s390_get_phb(void) { @@ -751,6 +754,15 @@ static void s390_pcihost_hot_plug(HotplugHandler *hotplug_dev, } if (object_dynamic_cast(OBJECT(dev), "vfio-pci")) { + S390FLICState *fs = s390_get_flic(); + VFIOPCIDevice *vdev = DO_UPCAST(VFIOPCIDevice, pdev, pdev); + + if ((!vdev->no_kvm_msix || !vdev->no_kvm_msix) && + (!fs || !fs->ais_supported)) { + error_setg(errp, "VFIO PCI is not supported " + "because kernel has no AIS capability."); + return; + } pbdev->fh |= FH_SHM_VFIO; } else { pbdev->fh |= FH_SHM_EMUL;