From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52188C4167B for ; Thu, 10 Dec 2020 14:53:49 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0DBDB23118 for ; Thu, 10 Dec 2020 14:53:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0DBDB23118 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:In-Reply-To:Message-Id:Date:Subject:To: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=5g7jhHrzrXAd8vn5nj0ry/8TpAMrckM1hwAXBGneS0A=; b=iGgUPIjnUybeWeY1Lh9u/3IHkj az/fs9BtOgWiaze93H47YZ3dYSIfLXIK50uLXcRwjvc4AIL3VU8ZvXQNxyQtCLbFgrgmyvlD97PHg YaZcZi8MZ3Pipi5Eor/uUI6pQFPIKPbtA0zrci9Q95x63S1ZmSQyNE/19WflF2P6tl5w17x1Yjvor IQftvfQIWikuX9AEtb7XiX2j1tZH3I6KxudqrqmsknccH1ihark6+wNqmiqbPHl5KOzDABm9j8lFl 6ZfSMssX/Q/VmaealhryPBVgpb5/XxbxnvwCeBsqvN7aXQURnvEgvO+1gokDgssh0LKCyJ8+cqHrm UheG1ZsA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knNIc-0004t7-AR; Thu, 10 Dec 2020 14:52:06 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1knNIY-0004ot-QS for linux-arm-kernel@merlin.infradead.org; Thu, 10 Dec 2020 14:52:02 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description; bh=d4ptvQ9hy4+y3d1fxJ/yEa4ywj3u9NeG46hccg1Vf8Y=; b=fyT4zOF1hkHCsoEWz0CCumsUgZ Fl9sfkuw17XF5kMYPOkFospYBYm84Eg6fjfT1LGgcJG3qJr+g3k26NlWGO4NCUOdI7Qeq2j7LbTLp lxHj0xBc1F498ZhCPsPQLv+GrBKEijWg9QuuYjZu62x3GcnXjNMwttJOJloGOrX9Mo6v/sh8UMV5z 1sAuUuCbyCj4PW4yRLGO8Bypsgrp8Z/nOERUom0lqNDKNQ/RMtmjlgnQnbrH+vOUdY84HC83WpCWo PQZE92Sb+7vdeGKM9fm4sutuB2Osg+g3NT/XD4tDukcFEueuytthnIOiCKclKpb2Ql3KAentmPUyp ft4alFOw==; Received: from foss.arm.com ([217.140.110.172]) by casper.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1knMwy-0002Rt-TO for linux-arm-kernel@lists.infradead.org; Thu, 10 Dec 2020 14:29:57 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6DBD51516; Thu, 10 Dec 2020 06:29:44 -0800 (PST) Received: from donnerap.arm.com (donnerap.cambridge.arm.com [10.1.195.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5444B3F718; Thu, 10 Dec 2020 06:29:43 -0800 (PST) From: Andre Przywara To: Will Deacon , Julien Thierry Subject: [PATCH kvmtool 17/21] virtio: Switch trap handling to use MMIO handler Date: Thu, 10 Dec 2020 14:29:04 +0000 Message-Id: <20201210142908.169597-18-andre.przywara@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201210142908.169597-1-andre.przywara@arm.com> References: <20201210142908.169597-1-andre.przywara@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201210_142945_495510_012EF5E6 X-CRM114-Status: GOOD ( 10.12 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arm-kernel@lists.infradead.org, Marc Zyngier , Alexandru Elisei , kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org With the planned retirement of the special ioport emulation code, we need to provide an emulation function compatible with the MMIO prototype. Adjust the existing MMIO callback routine to automatically determine the region this trap came through, and call the existing I/O handlers. Register the ioport region using the new registration function. Signed-off-by: Andre Przywara --- virtio/pci.c | 42 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/virtio/pci.c b/virtio/pci.c index 6eea6c68..49d3f4d5 100644 --- a/virtio/pci.c +++ b/virtio/pci.c @@ -178,15 +178,6 @@ static bool virtio_pci__data_in(struct kvm_cpu *vcpu, struct virtio_device *vdev return ret; } -static bool virtio_pci__io_in(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) -{ - struct virtio_device *vdev = ioport->priv; - struct virtio_pci *vpci = vdev->virtio; - unsigned long offset = port - virtio_pci__port_addr(vpci); - - return virtio_pci__data_in(vcpu, vdev, offset, data, size); -} - static void update_msix_map(struct virtio_pci *vpci, struct msix_table *msix_entry, u32 vecnum) { @@ -334,20 +325,6 @@ static bool virtio_pci__data_out(struct kvm_cpu *vcpu, struct virtio_device *vde return ret; } -static bool virtio_pci__io_out(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size) -{ - struct virtio_device *vdev = ioport->priv; - struct virtio_pci *vpci = vdev->virtio; - unsigned long offset = port - virtio_pci__port_addr(vpci); - - return virtio_pci__data_out(vcpu, vdev, offset, data, size); -} - -static struct ioport_operations virtio_pci__io_ops = { - .io_in = virtio_pci__io_in, - .io_out = virtio_pci__io_out, -}; - static void virtio_pci__msix_mmio_callback(struct kvm_cpu *vcpu, u64 addr, u8 *data, u32 len, u8 is_write, void *ptr) @@ -455,12 +432,15 @@ static void virtio_pci__io_mmio_callback(struct kvm_cpu *vcpu, { struct virtio_device *vdev = ptr; struct virtio_pci *vpci = vdev->virtio; - u32 mmio_addr = virtio_pci__mmio_addr(vpci); + u32 base_addr = virtio_pci__mmio_addr(vpci); + + if (addr < base_addr || addr >= base_addr + PCI_IO_SIZE) + base_addr = virtio_pci__port_addr(vpci); if (!is_write) - virtio_pci__data_in(vcpu, vdev, addr - mmio_addr, data, len); + virtio_pci__data_in(vcpu, vdev, addr - base_addr, data, len); else - virtio_pci__data_out(vcpu, vdev, addr - mmio_addr, data, len); + virtio_pci__data_out(vcpu, vdev, addr - base_addr, data, len); } static int virtio_pci__bar_activate(struct kvm *kvm, @@ -478,10 +458,8 @@ static int virtio_pci__bar_activate(struct kvm *kvm, switch (bar_num) { case 0: - r = ioport__register(kvm, bar_addr, &virtio_pci__io_ops, - bar_size, vdev); - if (r > 0) - r = 0; + r = kvm__register_pio(kvm, bar_addr, bar_size, + virtio_pci__io_mmio_callback, vdev); break; case 1: r = kvm__register_mmio(kvm, bar_addr, bar_size, false, @@ -510,7 +488,7 @@ static int virtio_pci__bar_deactivate(struct kvm *kvm, switch (bar_num) { case 0: - r = ioport__unregister(kvm, bar_addr); + r = kvm__deregister_pio(kvm, bar_addr); break; case 1: case 2: @@ -625,7 +603,7 @@ int virtio_pci__exit(struct kvm *kvm, struct virtio_device *vdev) virtio_pci__reset(kvm, vdev); kvm__deregister_mmio(kvm, virtio_pci__mmio_addr(vpci)); kvm__deregister_mmio(kvm, virtio_pci__msix_io_addr(vpci)); - ioport__unregister(kvm, virtio_pci__port_addr(vpci)); + kvm__deregister_pio(kvm, virtio_pci__port_addr(vpci)); return 0; } -- 2.17.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel