From nobody Sat May 18 00:52:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1670420329; cv=none; d=zohomail.com; s=zohoarc; b=e0zA2hL6eYlg4bn7kEyC8yOICIZI1RGBMV8NUFdrsaJ8JJT9LPU/mOa2637peJ0CbuI+fkKw6FZ00qv5aWBVLR1qJLtDnRY5uqXkXrR4KTlK7500xToGtb6WW6tQZF4wSdIuds/v0wvi9XF3I3DP6uNDclSQUbs0h2dbEi6tUSA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1670420329; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7tnKkh2H991EuhWAO/Xp+JQeGePEbB2PoZpX19x2WTg=; b=OUaauNNbFvpbpfJZ2QIOaNUL44KiGYYPeA9zQunssOAdhl6gQeMdUMORheevqSC3NvNZ2yXmecsf+YhQnJ5aVQ94nMbXlXUl1A3yaZQFJA6TAs6j0nAs6GR/+gM5KsbZHx4rau1Bhnl3bMxScxhVNy846gDrHJpIgYxqO5ftxKU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1670420329472772.625085988233; Wed, 7 Dec 2022 05:38:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p2uc7-0002MK-ES; Wed, 07 Dec 2022 08:37:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p2uc5-0002Lh-Nf for qemu-devel@nongnu.org; Wed, 07 Dec 2022 08:37:29 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p2ubo-0006Sp-0i for qemu-devel@nongnu.org; Wed, 07 Dec 2022 08:37:29 -0500 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-561-fbEJDFEqOMWbpRtmD3ehzQ-1; Wed, 07 Dec 2022 08:37:01 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 81CE886F130; Wed, 7 Dec 2022 13:37:00 +0000 (UTC) Received: from laptop.redhat.com (unknown [10.39.193.86]) by smtp.corp.redhat.com (Postfix) with ESMTP id B4B969E70; Wed, 7 Dec 2022 13:36:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1670420226; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7tnKkh2H991EuhWAO/Xp+JQeGePEbB2PoZpX19x2WTg=; b=S3TIU+14QXSMXluTc+iiZgncNFBU25LrD3M/HBCok+4U5/quePm/8lFf/aRUfj4XfWNr8m qQGjVdCzPWletQSa5efJsViRxqbXh3fn9Uc7f3VL4IYTYW0hm6amVzRgd6sCW1WNI0tkaI bEPlvs1OFkeL/16X3UL954q2Gl4uLog= X-MC-Unique: fbEJDFEqOMWbpRtmD3ehzQ-1 From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, mst@redhat.com, peterx@redhat.com, qemu-arm@nongnu.org, qemu-devel@nongnu.org, jean-philippe@linaro.org, bharat.bhushan@nxp.com, alex.williamson@redhat.com Subject: [PATCH for 8.0 1/2] virtio-iommu: Add unmap on virtio_iommu_remap() Date: Wed, 7 Dec 2022 14:36:45 +0100 Message-Id: <20221207133646.635760-2-eric.auger@redhat.com> In-Reply-To: <20221207133646.635760-1-eric.auger@redhat.com> References: <20221207133646.635760-1-eric.auger@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=eric.auger@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_PASS=-0.001, T_SPF_HELO_TEMPERROR=0.01 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1670420331220100001 Content-Type: text/plain; charset="utf-8" following replay() callback documentation in memory.h we shall first invalidate (notify with flag =3D=3D IOMMU_NONE) and then map for existing mappings. The code currently skips the unmap and just do map. This may lead to duplicate mapping attempts on VFIO side (leading to spurious -EEXIST DMA_MAP failures). Add the unmap. Signed-off-by: Eric Auger Fixes 308e5e1b5f8 ("virtio-iommu: Add replay() memory region callback") --- hw/virtio/virtio-iommu.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 62e07ec2e4..30334c85aa 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -1034,6 +1034,7 @@ static gboolean virtio_iommu_remap(gpointer key, gpoi= nter value, gpointer data) =20 trace_virtio_iommu_remap(mr->parent_obj.name, interval->low, interval-= >high, mapping->phys_addr); + virtio_iommu_notify_unmap(mr, interval->low, interval->high); virtio_iommu_notify_map(mr, interval->low, interval->high, mapping->phys_addr, mapping->flags); return false; --=20 2.37.3 From nobody Sat May 18 00:52:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1670420315; cv=none; d=zohomail.com; s=zohoarc; b=LvBRmMWECQYKw1jgikafWYDn0xdOr1DvhCQ/zoAbBeE00y2t2J+UhoJ0ejLSka3K9vArUGSu03uNLqeKsDOD3giPjO2q9NLqDtioRlbFPMLRI/8by6PwHl00n9ryMi3f1ns79hpDMRib8gEbb6FmH+k4kTR+R9K+7L62iVXCbHE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1670420315; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5/UyHJl48vBSnvkt5+gx7qkBlKO/QFIhbVzFp57PQ5s=; b=MxPNn6J8jVXGTlSX+A1pfVI3OiqB+2HN8ChtztqKpoZFoK79KPWbkEpF4l2cu3AqkTTnKtVYtrZpIdrmiP24NS8YdLkbTHPD9ShcUITXIjoCkaABV6tQAg0MQj5Xew18GtQG8b8kjT4apThekgZXnlQW8NPrrjcYlc8leO3tCVw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1670420315672639.6805529519606; Wed, 7 Dec 2022 05:38:35 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p2ubz-0002JA-AQ; Wed, 07 Dec 2022 08:37:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p2ubv-0002HS-LL for qemu-devel@nongnu.org; Wed, 07 Dec 2022 08:37:21 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p2ubn-0006Ss-GQ for qemu-devel@nongnu.org; Wed, 07 Dec 2022 08:37:14 -0500 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-621-2JP6O_pdMFGyOYd3wVnk7Q-1; Wed, 07 Dec 2022 08:37:03 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id A40B3185A7AD; Wed, 7 Dec 2022 13:37:02 +0000 (UTC) Received: from laptop.redhat.com (unknown [10.39.193.86]) by smtp.corp.redhat.com (Postfix) with ESMTP id CBCD79E70; Wed, 7 Dec 2022 13:37:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1670420226; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5/UyHJl48vBSnvkt5+gx7qkBlKO/QFIhbVzFp57PQ5s=; b=X1mQ+kH6/UpYLFnfaz6Be3AH7vNhCtPTgovygjso6lVFb20uo0J5NUPBjF533Cgfqwko/q JIhRbyB9i/SAyk7b7ANIlQ+oQPPqOdaprNVgbFAds02O/ByQ4GJ4kYOGqVuAYyxxyOg+4W /E7ukq1INVkn4fD/l2kWcog6nxeTmUE= X-MC-Unique: 2JP6O_pdMFGyOYd3wVnk7Q-1 From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, mst@redhat.com, peterx@redhat.com, qemu-arm@nongnu.org, qemu-devel@nongnu.org, jean-philippe@linaro.org, bharat.bhushan@nxp.com, alex.williamson@redhat.com Subject: [PATCH for 8.0 2/2] virtio-iommu: Fix replay on device attach Date: Wed, 7 Dec 2022 14:36:46 +0100 Message-Id: <20221207133646.635760-3-eric.auger@redhat.com> In-Reply-To: <20221207133646.635760-1-eric.auger@redhat.com> References: <20221207133646.635760-1-eric.auger@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.1 on 10.11.54.5 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=eric.auger@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1670420317141100001 Content-Type: text/plain; charset="utf-8" When attaching a device to a domain, we replay the existing domain mappings for that device. If there are several VFIO devices in the same group on the guest we may end up with duplicate mapping attempts because the mapping already exist on VFIO side. So let's do a proper remap, ie. first unmap and then map. Signed-off-by: Eric Auger Fixes 2f6eeb5f0bb ("virtio-iommu: Call memory notifiers in attach/detach") --- hw/virtio/virtio-iommu.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 30334c85aa..099dec1f31 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -277,19 +277,21 @@ static gboolean virtio_iommu_notify_unmap_cb(gpointer= key, gpointer value, return false; } =20 -static gboolean virtio_iommu_notify_map_cb(gpointer key, gpointer value, - gpointer data) +static gboolean virtio_iommu_notify_remap_cb(gpointer key, gpointer value, + gpointer data) { VirtIOIOMMUMapping *mapping =3D (VirtIOIOMMUMapping *) value; VirtIOIOMMUInterval *interval =3D (VirtIOIOMMUInterval *) key; IOMMUMemoryRegion *mr =3D (IOMMUMemoryRegion *) data; =20 + virtio_iommu_notify_unmap(mr, interval->low, interval->high); virtio_iommu_notify_map(mr, interval->low, interval->high, mapping->phys_addr, mapping->flags); =20 return false; } =20 + static void virtio_iommu_detach_endpoint_from_domain(VirtIOIOMMUEndpoint *= ep) { VirtIOIOMMUDomain *domain =3D ep->domain; @@ -489,7 +491,7 @@ static int virtio_iommu_attach(VirtIOIOMMU *s, virtio_iommu_switch_address_space(sdev); =20 /* Replay domain mappings on the associated memory region */ - g_tree_foreach(domain->mappings, virtio_iommu_notify_map_cb, + g_tree_foreach(domain->mappings, virtio_iommu_notify_remap_cb, ep->iommu_mr); =20 return VIRTIO_IOMMU_S_OK; --=20 2.37.3