From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953310; cv=none; d=zohomail.com; s=zohoarc; b=AzEb8NMwpSvGeZ6AAu0kv1AVZZNieLDcdXbQnKJPU2L02IhlXoUbAtvQUt6CZ99MvCfA8e5wMrOQfIktVAIldkoHp5hs0/A5NGb3j4wCbANt0D3VwrbpPNDYGXb/JkKKycqeZSoKAnXT0tglva40E4dlksZdH9KE0NtImT8Jhjw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953310; h=Content-Type:Cc: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=qEAv6IpogbV7YHyhj2l6c6UjHVFT5rsptczJTs+HL8c=; b=bv//ITWT34AaoNFKUBm+p9OYeZWeoaVsW9rwNgOVSf20CqNXjCFAshyCdK/UeT4Zt3Vb76E8/c95y049IzUCiFSSS3GIOeR629EAlEP0ttu8b1DvoKzq8dIkuUTdLg3vsKz/lU6qrhw2uCoyAo+ZQ6FHuwKStYbflCiyYpTNdAU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953310593331.3746322335254; Mon, 23 Mar 2020 01:48:30 -0700 (PDT) Received: from localhost ([::1]:58640 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIl3-0001Ik-4O for importer@patchew.org; Mon, 23 Mar 2020 04:48:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48315) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjH-0007yE-B1 for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjG-00033X-9U for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:39 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:13382 helo=mx0b-0016f401.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjG-000331-1x; Mon, 23 Mar 2020 04:46:38 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8dj0Q010653; Mon, 23 Mar 2020 01:46:34 -0700 Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9ndrvw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:46:34 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:46:32 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:46:27 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=qEAv6IpogbV7YHyhj2l6c6UjHVFT5rsptczJTs+HL8c=; b=QmidH2EckQDjt3AcVakyn4T5TG19v6Ne2x5+5HfHlbXgcPYaCIXc5RadonxBLFQPnSHN ehFMaSaBms/o1IYBkvqGN4Sz2ZRqV383mUjY0l61DwyhCt86bP+4rmldwTewh3qnb6f3 zBJ5VnVFCXct5nKA8sbFCU4VbWGQzJRJTV1r9WnmnNDSlSD/cbXbeq33A2fwzIBOgNog gsTcmMHRm0OrvrBbNRwwqeAh7CtWdDgsGF5ALO35clHOIk84rTFF2eu12EZ7jtHTSfER haudumhaenwYVoszg+1t7WK2SUYOZrGijsa+fY8a844T7iXkCxPqX2BvUZOSqkAXTHcF ew== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 1/9] hw/vfio/common: Remove error print on mmio region translation by viommu Date: Mon, 23 Mar 2020 14:16:09 +0530 Message-ID: <20200323084617.1782-2-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.148.174 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Auger , Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" On ARM, the MSI doorbell is translated by the virtual IOMMU. As such address_space_translate() returns the MSI controller MMIO region and we get an "iommu map to non memory area" message. Let's remove this latter. Signed-off-by: Eric Auger Signed-off-by: Bharat Bhushan --- hw/vfio/common.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 5ca11488d6..c586edf47a 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -426,8 +426,6 @@ static bool vfio_get_vaddr(IOMMUTLBEntry *iotlb, void *= *vaddr, &xlat, &len, writable, MEMTXATTRS_UNSPECIFIED); if (!memory_region_is_ram(mr)) { - error_report("iommu map to non memory area %"HWADDR_PRIx"", - xlat); return false; } =20 --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; 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=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953315; cv=none; d=zohomail.com; s=zohoarc; b=YJPM2PFNB09Faa6LcKcPENw3Z33EoJz60BjXJHotOLUpAjNKM94EcpUwdrKYWRbTu828DHVhbOQpekeZXHgoO9Ij1kI+OTUwg/fN66+XWFBsYiIEQgO8zmp2oZ3d3PH2bSGSXx/OfTZnll4/Gh3DU392DBVFS2sIhE4NEgmpylw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953315; h=Content-Type:Cc: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=Yu7U+IO1rJyPwcaDXc5BvMtX+sxoPo9svPD67aq7oOo=; b=nLP0+3t/65E54+EiZRRnuNcTsGx7zCxENaGh/wY5ED2RU8ojjzSAVQHYs/4AW3Gj3h++Htq49WPZE/wFqn4h6npfeFsrsDWqjQYRXOydlP6gnaE9ARKMlco21crEMaFPz+UKxtk9cR6858kSfWnnl/4SwHgHc+FTI/X8niX4e5Y= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953315813862.552910403084; Mon, 23 Mar 2020 01:48:35 -0700 (PDT) Received: from localhost ([::1]:58648 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIl8-0001SU-ED for importer@patchew.org; Mon, 23 Mar 2020 04:48:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48377) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjP-00085r-7g for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjN-00036M-UR for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:47 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:43406 helo=mx0b-0016f401.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjL-00034t-4u; Mon, 23 Mar 2020 04:46:43 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8eAKB010842; Mon, 23 Mar 2020 01:46:40 -0700 Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9ndrvy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:46:40 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:46:38 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:46:38 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:46:33 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=Yu7U+IO1rJyPwcaDXc5BvMtX+sxoPo9svPD67aq7oOo=; b=KYp/SFJ7rH3N7EY41c2vYIa4JUd5vnIaAOIvT4t+SLgMOkw4a9k7PmU/vHcjb/lOOYXk 4C+m3p3yTil04bUb8aD2CaySpJ8h7hqGWBTs4LGXA8529f5Lh4f1gRyyTaioQViMWxqi OHmLO7S2aK5Il6WL3hLknKThibQAWIv2CN36wWUOOLi1WooVpK5VbTE/9Ik2KdI+eM8t FVFfm74EwMWSaMydvZmberdPZwKSZh+Yra15ucpN5pCWQtAaFHRdyohEv7GSQDGQqACQ 3BzO7ODlNfUj/Gh1j7cYrbEw3PXVjC2ARK0xWToXbmTfGr5wvGmrUNAkruC6WQvrn6j9 iA== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 2/9] memory: Add interface to set iommu page size mask Date: Mon, 23 Mar 2020 14:16:10 +0530 Message-ID: <20200323084617.1782-3-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.148.174 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @marvell.com) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow to set page size mask to be supported by iommu. This is required to expose page size mask compatible with host with virtio-iommu. Signed-off-by: Bharat Bhushan --- include/exec/memory.h | 20 ++++++++++++++++++++ memory.c | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/exec/memory.h b/include/exec/memory.h index e85b7de99a..063c424854 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -355,6 +355,16 @@ typedef struct IOMMUMemoryRegionClass { * @iommu: the IOMMUMemoryRegion */ int (*num_indexes)(IOMMUMemoryRegion *iommu); + + /* + * Set supported IOMMU page size + * + * Optional method: if this is supported then set page size that + * can be supported by IOMMU. This is called to set supported page + * size as per host Linux. + */ + void (*iommu_set_page_size_mask)(IOMMUMemoryRegion *iommu, + uint64_t page_size_mask); } IOMMUMemoryRegionClass; =20 typedef struct CoalescedMemoryRange CoalescedMemoryRange; @@ -1363,6 +1373,16 @@ int memory_region_iommu_attrs_to_index(IOMMUMemoryRe= gion *iommu_mr, */ int memory_region_iommu_num_indexes(IOMMUMemoryRegion *iommu_mr); =20 +/** + * memory_region_iommu_set_page_size_mask: set the supported pages + * size by iommu. + * + * @iommu_mr: the memory region + * @page_size_mask: supported page size mask + */ +void memory_region_iommu_set_page_size_mask(IOMMUMemoryRegion *iommu_mr, + uint64_t page_size_mask); + /** * memory_region_name: get a memory region's name * diff --git a/memory.c b/memory.c index aeaa8dcc9e..14c8783084 100644 --- a/memory.c +++ b/memory.c @@ -1833,6 +1833,16 @@ static int memory_region_update_iommu_notify_flags(I= OMMUMemoryRegion *iommu_mr, return ret; } =20 +void memory_region_iommu_set_page_size_mask(IOMMUMemoryRegion *iommu_mr, + uint64_t page_size_mask) +{ + IOMMUMemoryRegionClass *imrc =3D IOMMU_MEMORY_REGION_GET_CLASS(iommu_m= r); + + if (imrc->iommu_set_page_size_mask) { + imrc->iommu_set_page_size_mask(iommu_mr, page_size_mask); + } +} + int memory_region_register_iommu_notifier(MemoryRegion *mr, IOMMUNotifier *n, Error **errp) { --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; 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=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953311; cv=none; d=zohomail.com; s=zohoarc; b=Tjf4bUcos3oVFNtiANbeINko3Fz3d7rj3cT/2z4n0MXQp4Ug6Xjq+wLJ4JVkAFWvykTjw2u2iYTrZ/yxLQakI1dEX+GgX0/FR3ASBy1pd6JkodDzsdjFN4icDGfftnrCu9lwwCJPMhrp9o3NGEBQtsXqfWOEy0Ur4rpsnrq/HHY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953311; h=Content-Type:Cc: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=WEugmL+w41y9WSds0AUf8b6EHXZir+QEns7Vh2avFLc=; b=c4dMVUdFJwbUK8GdyAlrB466aPm57KEsfkLIYao523uk/I7ySRdXtq+2rJpoiD3oKs68jXyKuSSG88zUWUAc0O1ReRpAsCBxoIHoTFf0jlTzkUCjmo4c5InWnpfsdJn2fNDTv6Cix1MeMvpnVr1VI3MS+0KlkedRfwn0jBK8ifw= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953311459939.0002987595715; Mon, 23 Mar 2020 01:48:31 -0700 (PDT) Received: from localhost ([::1]:58644 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIl4-0001LR-6a for importer@patchew.org; Mon, 23 Mar 2020 04:48:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48395) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjT-0008EB-9n for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjS-00037M-7g for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:51 -0400 Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:37044) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjQ-00036x-6K; Mon, 23 Mar 2020 04:46:50 -0400 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8eL98013746; Mon, 23 Mar 2020 01:46:45 -0700 Received: from sc-exch04.marvell.com ([199.233.58.184]) by mx0b-0016f401.pphosted.com with ESMTP id 2ywvkqkxc4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:46:45 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:46:43 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:46:39 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=WEugmL+w41y9WSds0AUf8b6EHXZir+QEns7Vh2avFLc=; b=LAMKq5QuG4kK1ioaWD6GeDh51nj7vFAW9UY81y0rHx6XQhd/eSg9KfuuLTjVKiezo2Ku 5heCYmp31pcEOZSqvYw0IqImQnUqUBjvolwEWKnfTJWWP72OuMg0O2jg5ajdPxtqkZXx qP4srqJQZL4wws9mtKz2QUvc3inoqusQ/3cYs0yBKVeh6OrTZoW2C6pso0WVskoF4uir t1eLYWAJGgNZpdH/AZTr4doMl/AmIlW5UtiLNsL+wJ/++xP9rpP3A3auZN23pgFfhOaw oZ5ABcCvXjXjt4nP0lkrgZ/UPaf06AoHM6RZbL7/pidTtX45tL9uY0hC4OoiJ5YqJlvH EA== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 3/9] vfio: set iommu page size as per host supported page size Date: Mon, 23 Mar 2020 14:16:11 +0530 Message-ID: <20200323084617.1782-4-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.156.173 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @marvell.com) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Set iommu supported page size mask same as host Linux supported page size mask. Signed-off-by: Bharat Bhushan --- hw/vfio/common.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/vfio/common.c b/hw/vfio/common.c index c586edf47a..6ea50d696f 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -635,6 +635,9 @@ static void vfio_listener_region_add(MemoryListener *li= stener, int128_get64(llend), iommu_idx); =20 + memory_region_iommu_set_page_size_mask(giommu->iommu, + container->pgsizes); + ret =3D memory_region_register_iommu_notifier(section->mr, &giommu= ->n, &err); if (ret) { --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; 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=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953453; cv=none; d=zohomail.com; s=zohoarc; b=ZZPsW1mKUS2Sxg2dsMmShjenOGRbMgkgI+ED1c+lovTfsU2LqYvtWpM03NrnvJK9AdWmLdLUtifd7t0jgcvh3V5CD85PKWaYFeZ3K+np6u6FdvLvf3nWQGOBOilzcoMfLDulr9khTirpQsiS9EHZYKkNpf6DQYW+CLmX0GSVqUI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953453; h=Content-Type:Cc: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=RiNtP0lrtaA2ZggFVaFqGet0PIqt/tlcLob6DvD3BIo=; b=V+jruZs42ogYFXwneTsknpi0CMBwb2tTGmqgIAVwZvptrWQiRvSdceGP5VkZFh7xzpaA4mX2WKI5ojYKWv9hbyAsaa0iLXyJOtN9IB53zv3fI9KOn+Mad2oynM12vZ5H/9UtZhV7Z0H29+te7HtzziCVfVJiGSkpqh71z5wilvI= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953453560548.8651858332378; Mon, 23 Mar 2020 01:50:53 -0700 (PDT) Received: from localhost ([::1]:58706 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGInM-0004aY-Aa for importer@patchew.org; Mon, 23 Mar 2020 04:50:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48437) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIja-0008T2-4M for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjY-00039U-U9 for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:46:57 -0400 Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:35584) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjY-00039L-PN; Mon, 23 Mar 2020 04:46:56 -0400 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8eL99013746; Mon, 23 Mar 2020 01:46:52 -0700 Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0b-0016f401.pphosted.com with ESMTP id 2ywvkqkxcc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:46:51 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:46:49 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:46:45 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=RiNtP0lrtaA2ZggFVaFqGet0PIqt/tlcLob6DvD3BIo=; b=xPsIXPFZH1oBDFsmhrf4vd1qjKM+gRvSsYTpuGTLutwgM7aCvKuU1+Lgutt5N4zcrJgQ yUSMhQ4PRW97XYPXqfG73NELAFSyBEYLViw0AkZfNfPtCUy4N6+m9YainsvFkgoXz2Dr Z2jFZQBkzfhznDLi/LPGD+sDv7w5ogXuAYimPhC0Ks7sXiOQoRGxOoUlQMUhQg2dzf5Q 5C7yXBz+6rvKilU8ualk7AGCRU0NDwY9sX7kqNFCEbA59cFYHNEO0YOxXgRS8ZHiSZcP faM5/b9Z7OU2PnCBpkzbINye+E/KKOd9YhAFXHW6p5/A8BDaiRvJICJ2H+qVBO41t6g7 RA== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 4/9] virtio-iommu: set supported page size mask Date: Mon, 23 Mar 2020 14:16:12 +0530 Message-ID: <20200323084617.1782-5-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.156.173 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @marvell.com) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add optional interface to set page size mask. Currently this is set global configuration and not per endpoint. Signed-off-by: Bharat Bhushan --- include/hw/virtio/virtio-iommu.h | 1 + hw/virtio/virtio-iommu.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/include/hw/virtio/virtio-iommu.h b/include/hw/virtio/virtio-io= mmu.h index 6f67f1020a..4efa09610a 100644 --- a/include/hw/virtio/virtio-iommu.h +++ b/include/hw/virtio/virtio-iommu.h @@ -35,6 +35,7 @@ typedef struct IOMMUDevice { void *viommu; PCIBus *bus; int devfn; + uint64_t page_size_mask; IOMMUMemoryRegion iommu_mr; AddressSpace as; } IOMMUDevice; diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 4cee8083bc..a28818202c 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -650,6 +650,14 @@ static gint int_cmp(gconstpointer a, gconstpointer b, = gpointer user_data) return (ua > ub) - (ua < ub); } =20 +static void virtio_iommu_set_page_size_mask(IOMMUMemoryRegion *mr, + uint64_t page_size_mask) +{ + IOMMUDevice *sdev =3D container_of(mr, IOMMUDevice, iommu_mr); + + sdev->page_size_mask =3D page_size_mask; +} + static void virtio_iommu_device_realize(DeviceState *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); @@ -865,6 +873,7 @@ static void virtio_iommu_memory_region_class_init(Objec= tClass *klass, IOMMUMemoryRegionClass *imrc =3D IOMMU_MEMORY_REGION_CLASS(klass); =20 imrc->translate =3D virtio_iommu_translate; + imrc->iommu_set_page_size_mask =3D virtio_iommu_set_page_size_mask; } =20 static const TypeInfo virtio_iommu_info =3D { --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953447; cv=none; d=zohomail.com; s=zohoarc; b=nhf0NEqwJO1/lO23ib+q00O0i8A6t1dLGU1A5eTL6k5JcVxLvl98EqcWZ/oPwHqSTCwe4OKOIHiJ1COmW+UEjA8kMjIwJe3GI9qERpmdlny2BcrC3al0GO0lpMshFlJNQsD7gaFM56OGcBtsbLVSveklNn9SMfesdR76N9Ztw3A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953447; h=Content-Type:Cc: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=l3c+XiKS8WJssA8PHo8GKKWyszuBffSUYxnje2SlTA4=; b=dUwaG0I7husekYPatLowAZBcBNTkWGJKmwlyMl45C2WJLLRWQIf9SCKsUGVzBC64p2pNSqMAIS/iOAg/Tfijbr0grHJxlOjP8z0okQMn+miNMw0NNuLbHrDv3C/9Tsptx+YH3TfII/2pNAPkM0kdlTaemN9hCPGjxT3u/cR7igI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953447018869.6511915394144; Mon, 23 Mar 2020 01:50:47 -0700 (PDT) Received: from localhost ([::1]:58702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGInF-0004QV-Ds for importer@patchew.org; Mon, 23 Mar 2020 04:50:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48462) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjf-0008Vo-EM for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjc-0003Al-Fx for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:03 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:17568 helo=mx0b-0016f401.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjc-0003AO-7n; Mon, 23 Mar 2020 04:47:00 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8dp6p010660; Mon, 23 Mar 2020 01:46:57 -0700 Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9ndrwq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:46:57 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:46:55 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:46:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=l3c+XiKS8WJssA8PHo8GKKWyszuBffSUYxnje2SlTA4=; b=TJQQDE1riMkEiVPy6VdYwRyK9NOjzC6LcIC1W3mrHv0z0tuBsGv4KPPO08Dfw88MZDiz o9H8S74L2wIeIRw9NWGOkc0m0UJ9iI4b7q9bldLhe/BmR2GupPnWBac7cvOa0xaWI8qO ET7uAIS3l0jWdYqKih8uwHlLvVf3ccPd9tedbCVRfXIGESwVBQUK8UY6jec8mtC+MHMz sNNHrwDOf4IK6K5oa+gnIarfdKYUkw7/n3iONJOIuIbUzokVifodnpwL9ISspDvB2tfC gMGSppK1IerB3ODk9Il/ShWo3o0Qa1vRzPORxfGT8kjrMoLoSf6L1cDVZ8j5W68DLQ0E ag== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 5/9] virtio-iommu: Add iommu notifier for map/unmap Date: Mon, 23 Mar 2020 14:16:13 +0530 Message-ID: <20200323084617.1782-6-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.148.174 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Auger , Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch extends VIRTIO_IOMMU_T_MAP/UNMAP request to notify registered iommu-notifier. Which will call vfio notifier to map/unmap region in iommu. Signed-off-by: Bharat Bhushan Signed-off-by: Eric Auger --- include/hw/virtio/virtio-iommu.h | 2 + hw/virtio/virtio-iommu.c | 67 +++++++++++++++++++++++++++++++- hw/virtio/trace-events | 2 + 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/include/hw/virtio/virtio-iommu.h b/include/hw/virtio/virtio-io= mmu.h index 4efa09610a..e53586df70 100644 --- a/include/hw/virtio/virtio-iommu.h +++ b/include/hw/virtio/virtio-iommu.h @@ -38,6 +38,7 @@ typedef struct IOMMUDevice { uint64_t page_size_mask; IOMMUMemoryRegion iommu_mr; AddressSpace as; + QLIST_ENTRY(IOMMUDevice) next; } IOMMUDevice; =20 typedef struct IOMMUPciBus { @@ -57,6 +58,7 @@ typedef struct VirtIOIOMMU { GTree *domains; QemuMutex mutex; GTree *endpoints; + QLIST_HEAD(, IOMMUDevice) notifiers_list; } VirtIOIOMMU; =20 #endif diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index a28818202c..bd464d4fb3 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -123,6 +123,38 @@ static gint interval_cmp(gconstpointer a, gconstpointe= r b, gpointer user_data) } } =20 +static void virtio_iommu_notify_map(IOMMUMemoryRegion *mr, hwaddr iova, + hwaddr paddr, hwaddr size) +{ + IOMMUTLBEntry entry; + + entry.target_as =3D &address_space_memory; + entry.addr_mask =3D size - 1; + + entry.iova =3D iova; + trace_virtio_iommu_notify_map(mr->parent_obj.name, iova, paddr, size); + entry.perm =3D IOMMU_RW; + entry.translated_addr =3D paddr; + + memory_region_notify_iommu(mr, 0, entry); +} + +static void virtio_iommu_notify_unmap(IOMMUMemoryRegion *mr, hwaddr iova, + hwaddr size) +{ + IOMMUTLBEntry entry; + + entry.target_as =3D &address_space_memory; + entry.addr_mask =3D size - 1; + + entry.iova =3D iova; + trace_virtio_iommu_notify_unmap(mr->parent_obj.name, iova, size); + entry.perm =3D IOMMU_NONE; + entry.translated_addr =3D 0; + + memory_region_notify_iommu(mr, 0, entry); +} + static void virtio_iommu_detach_endpoint_from_domain(VirtIOIOMMUEndpoint *= ep) { if (!ep->domain) { @@ -307,9 +339,12 @@ static int virtio_iommu_map(VirtIOIOMMU *s, uint64_t virt_start =3D le64_to_cpu(req->virt_start); uint64_t virt_end =3D le64_to_cpu(req->virt_end); uint32_t flags =3D le32_to_cpu(req->flags); + hwaddr size =3D virt_end - virt_start + 1; VirtIOIOMMUDomain *domain; VirtIOIOMMUInterval *interval; VirtIOIOMMUMapping *mapping; + VirtIOIOMMUEndpoint *ep; + IOMMUDevice *sdev; =20 if (flags & ~VIRTIO_IOMMU_MAP_F_MASK) { return VIRTIO_IOMMU_S_INVAL; @@ -339,9 +374,38 @@ static int virtio_iommu_map(VirtIOIOMMU *s, =20 g_tree_insert(domain->mappings, interval, mapping); =20 + /* All devices in an address-space share mapping */ + QLIST_FOREACH(sdev, &s->notifiers_list, next) { + QLIST_FOREACH(ep, &domain->endpoint_list, next) { + if (ep->id =3D=3D sdev->devfn) { + virtio_iommu_notify_map(&sdev->iommu_mr, + virt_start, phys_start, size); + } + } + } + return VIRTIO_IOMMU_S_OK; } =20 +static void virtio_iommu_remove_mapping(VirtIOIOMMU *s, + VirtIOIOMMUDomain *domain, + VirtIOIOMMUInterval *interval) +{ + VirtIOIOMMUEndpoint *ep; + IOMMUDevice *sdev; + + QLIST_FOREACH(sdev, &s->notifiers_list, next) { + QLIST_FOREACH(ep, &domain->endpoint_list, next) { + if (ep->id =3D=3D sdev->devfn) { + virtio_iommu_notify_unmap(&sdev->iommu_mr, + interval->low, + interval->high - interval->low += 1); + } + } + } + g_tree_remove(domain->mappings, (gpointer)(interval)); +} + static int virtio_iommu_unmap(VirtIOIOMMU *s, struct virtio_iommu_req_unmap *req) { @@ -368,7 +432,7 @@ static int virtio_iommu_unmap(VirtIOIOMMU *s, uint64_t current_high =3D iter_key->high; =20 if (interval.low <=3D current_low && interval.high >=3D current_hi= gh) { - g_tree_remove(domain->mappings, iter_key); + virtio_iommu_remove_mapping(s, domain, iter_key); trace_virtio_iommu_unmap_done(domain_id, current_low, current_= high); } else { ret =3D VIRTIO_IOMMU_S_RANGE; @@ -663,6 +727,7 @@ static void virtio_iommu_device_realize(DeviceState *de= v, Error **errp) VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); VirtIOIOMMU *s =3D VIRTIO_IOMMU(dev); =20 + QLIST_INIT(&s->notifiers_list); virtio_init(vdev, "virtio-iommu", VIRTIO_ID_IOMMU, sizeof(struct virtio_iommu_config)); =20 diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events index e83500bee9..d94a1cd8a3 100644 --- a/hw/virtio/trace-events +++ b/hw/virtio/trace-events @@ -73,3 +73,5 @@ virtio_iommu_get_domain(uint32_t domain_id) "Alloc domain= =3D%d" virtio_iommu_put_domain(uint32_t domain_id) "Free domain=3D%d" virtio_iommu_translate_out(uint64_t virt_addr, uint64_t phys_addr, uint32_= t sid) "0x%"PRIx64" -> 0x%"PRIx64 " for sid=3D%d" virtio_iommu_report_fault(uint8_t reason, uint32_t flags, uint32_t endpoin= t, uint64_t addr) "FAULT reason=3D%d flags=3D%d endpoint=3D%d address =3D0x= %"PRIx64 +virtio_iommu_notify_map(const char *name, uint64_t iova, uint64_t paddr, u= int64_t map_size) "mr=3D%s iova=3D0x%"PRIx64" pa=3D0x%" PRIx64" size=3D0x%"= PRIx64 +virtio_iommu_notify_unmap(const char *name, uint64_t iova, uint64_t map_si= ze) "mr=3D%s iova=3D0x%"PRIx64" size=3D0x%"PRIx64 --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; 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=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953525; cv=none; d=zohomail.com; s=zohoarc; b=O9vo86dfy11IKYUHP+YllCLEkV89QFNytrcbEk5ksHERnYKGBLIH6VcB2CK0gtNY5ka0xIatJSgt/xbflpv8/pmhmmCun8S3zzTyb/BFLOQnASoTjreVWa35knHGvzvYG+Dz86Y7bSQQmilHkr60/LYsZ9DOtJMI7XCsyC0/Pxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953525; h=Content-Type:Cc: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=6uTNrZsOxWL293QbnMDHDEcZhVh+4bvO0bI5PoXuaQw=; b=Lc0irqEqSuVBk14XpxlkL0OjF53vssOxyYorttB5rQGMY49Yt9UlVIGN0NXeBOOl+4HjxT803GtE+sa352QshUKMCHbC9JsSqv5uyjQ6ESEqKSSKDjyOQa/lZz6hj2aOgA59t76WEu72tOrpZVXyhfdfg/O8su+Fks61hr4DKFc= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953525981475.37371761915415; Mon, 23 Mar 2020 01:52:05 -0700 (PDT) Received: from localhost ([::1]:58746 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIoW-0006zf-OL for importer@patchew.org; Mon, 23 Mar 2020 04:52:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48500) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjn-00009P-JQ for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjm-0003F4-BD for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:11 -0400 Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:10634) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIji-0003CP-Jq; Mon, 23 Mar 2020 04:47:06 -0400 Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8ePfP013763; Mon, 23 Mar 2020 01:47:04 -0700 Received: from sc-exch04.marvell.com ([199.233.58.184]) by mx0b-0016f401.pphosted.com with ESMTP id 2ywvkqkxcm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:47:04 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:47:01 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:47:01 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:46:56 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=6uTNrZsOxWL293QbnMDHDEcZhVh+4bvO0bI5PoXuaQw=; b=IxKd0egvumpqD+jjivEF0CZQiDPWXIU5qb2XL+zYpDUwtN2m4q8tQHcTbHztHx2fQ0gw DN8DBbZKzU5962T9kqfPxj61B0ob78zzdcc2M+Dl+fDAB/gukga9LTeWdA5i541adS/0 6vdkFpsPmP+zPcsKp+4CXX8zTrb8h8vmpApaXt+HfZkvPs39iGpp8u5y7hv7JCxMHNm+ gGzrHk4YJ8rvEfrl4YfZjzat3XFLjK6+RsdxU1fz5mzL6syuHeGJv5lfPOD5x52cDGM1 KdvIPSOn+f9VnaVYQLD3ONfXSUvg9qhriQRAm8PdpHoKfIHf6JN1wKshZznjREh5w6tQ Gg== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 6/9] virtio-iommu: Call iommu notifier for attach/detach Date: Mon, 23 Mar 2020 14:16:14 +0530 Message-ID: <20200323084617.1782-7-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.156.173 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @marvell.com) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" iommu-notifier are called when a device is attached or detached to as address-space. This is needed for VFIO. Signed-off-by: Bharat Bhushan --- hw/virtio/virtio-iommu.c | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index bd464d4fb3..88849aa7b9 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -49,6 +49,7 @@ typedef struct VirtIOIOMMUEndpoint { uint32_t id; VirtIOIOMMUDomain *domain; QLIST_ENTRY(VirtIOIOMMUEndpoint) next; + VirtIOIOMMU *viommu; } VirtIOIOMMUEndpoint; =20 typedef struct VirtIOIOMMUInterval { @@ -155,11 +156,48 @@ static void virtio_iommu_notify_unmap(IOMMUMemoryRegi= on *mr, hwaddr iova, memory_region_notify_iommu(mr, 0, entry); } =20 +static gboolean virtio_iommu_mapping_unmap(gpointer key, gpointer value, + gpointer data) +{ + VirtIOIOMMUInterval *interval =3D (VirtIOIOMMUInterval *) key; + IOMMUMemoryRegion *mr =3D (IOMMUMemoryRegion *) data; + + virtio_iommu_notify_unmap(mr, interval->low, + interval->high - interval->low + 1); + + return false; +} + +static gboolean virtio_iommu_mapping_map(gpointer key, gpointer value, + gpointer data) +{ + VirtIOIOMMUMapping *mapping =3D (VirtIOIOMMUMapping *) value; + VirtIOIOMMUInterval *interval =3D (VirtIOIOMMUInterval *) key; + IOMMUMemoryRegion *mr =3D (IOMMUMemoryRegion *) data; + + virtio_iommu_notify_map(mr, interval->low, mapping->phys_addr, + interval->high - interval->low + 1); + + return false; +} + static void virtio_iommu_detach_endpoint_from_domain(VirtIOIOMMUEndpoint *= ep) { + VirtIOIOMMU *s =3D ep->viommu; + VirtIOIOMMUDomain *domain =3D ep->domain; + IOMMUDevice *sdev; + if (!ep->domain) { return; } + + QLIST_FOREACH(sdev, &s->notifiers_list, next) { + if (ep->id =3D=3D sdev->devfn) { + g_tree_foreach(domain->mappings, virtio_iommu_mapping_unmap, + &sdev->iommu_mr); + } + } + QLIST_REMOVE(ep, next); ep->domain =3D NULL; } @@ -178,6 +216,7 @@ static VirtIOIOMMUEndpoint *virtio_iommu_get_endpoint(V= irtIOIOMMU *s, } ep =3D g_malloc0(sizeof(*ep)); ep->id =3D ep_id; + ep->viommu =3D s; trace_virtio_iommu_get_endpoint(ep_id); g_tree_insert(s->endpoints, GUINT_TO_POINTER(ep_id), ep); return ep; @@ -274,6 +313,7 @@ static int virtio_iommu_attach(VirtIOIOMMU *s, uint32_t ep_id =3D le32_to_cpu(req->endpoint); VirtIOIOMMUDomain *domain; VirtIOIOMMUEndpoint *ep; + IOMMUDevice *sdev; =20 trace_virtio_iommu_attach(domain_id, ep_id); =20 @@ -299,6 +339,14 @@ static int virtio_iommu_attach(VirtIOIOMMU *s, =20 ep->domain =3D domain; =20 + /* Replay domain mappings on the associated memory region */ + QLIST_FOREACH(sdev, &s->notifiers_list, next) { + if (ep_id =3D=3D sdev->devfn) { + g_tree_foreach(domain->mappings, virtio_iommu_mapping_map, + &sdev->iommu_mr); + } + } + return VIRTIO_IOMMU_S_OK; } =20 @@ -872,6 +920,7 @@ static gboolean reconstruct_endpoints(gpointer key, gpo= inter value, =20 QLIST_FOREACH(iter, &d->endpoint_list, next) { iter->domain =3D d; + iter->viommu =3D s; g_tree_insert(s->endpoints, GUINT_TO_POINTER(iter->id), iter); } return false; /* continue the domain traversal */ --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; 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=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953530; cv=none; d=zohomail.com; s=zohoarc; b=eKRNAMV4YmA2Ydz+YvBgz0gbZuMnfLJ19rPHiLUwBNEAoeon/8GSE4AcErUcdENX2S9bn0z+3kpWnENjsVyRYJqu1yaCx7MKpRyMwMc7HLvH3SCK+/uhAfQ2je3oE2h9lKndblg71ndVwKax7qpQ+XcZPn87ysuEqOj49dh/Fk8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953530; h=Content-Type:Cc: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=Hl/XyCKAJ1EEPKyfPSElXYvi1a0lw4Ra95KpUJUtj48=; b=V/AwTGXwa6KxjE7qDIHd1jajJ1G+pxGeDwOcvwi4ryp0QXJvUk3uEewzCUxJeMesXZn+JLEZ/beNac/fwtBozUcnn62ZaRpRE07dMeA6xR7hgnVHO1+zRcQnN3F2ULUElem2YuH7vnwy2f3KqiEqaXT1XtRnApqZ87ZGX1C56k8= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953530382610.3945352944155; Mon, 23 Mar 2020 01:52:10 -0700 (PDT) Received: from localhost ([::1]:58750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIob-00076F-7i for importer@patchew.org; Mon, 23 Mar 2020 04:52:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48511) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjp-0000BI-1n for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjn-0003Gi-Ct for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:12 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:51134 helo=mx0b-0016f401.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjn-0003FA-4J; Mon, 23 Mar 2020 04:47:11 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8eAku010847; Mon, 23 Mar 2020 01:47:08 -0700 Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9ndrx5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:47:08 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:47:06 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:47:02 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=Hl/XyCKAJ1EEPKyfPSElXYvi1a0lw4Ra95KpUJUtj48=; b=fiuIkYT8TdNFxpSIVM3lmovpu+wPxAWI8lQFeyTohtExktEWTG11LH8mxsgIumzXpFgm CO9VSOaBSOden30k7WtSos8K0aCilpDPmC24pRiL5Pdi3NPY4AK048tpDWut2LPhD8rB zk3yiTHcoqaF25rWSJ6/VjCSX5liGsZvamyOsnGS/gCmDkL9pjWdmL9OYYxQ53w9lqqN sLcJfWS7+8je7Svh7ScDvZc6t29R4BzHa+XVi3o2WCqpzE8En69KY2TG4P641oTGVr7K X64TtjY2ZwEmOarz8Frutmtpkp9wN58QHPaGCrEZP9DhSCAnjs7HrmOeOPAjXYUKce84 og== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 7/9] virtio-iommu: add iommu replay Date: Mon, 23 Mar 2020 14:16:15 +0530 Message-ID: <20200323084617.1782-8-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.148.174 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @marvell.com) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Default replay does not work with virtio-iommu, so this patch provide virtio-iommu replay functionality. Signed-off-by: Bharat Bhushan --- hw/virtio/virtio-iommu.c | 44 ++++++++++++++++++++++++++++++++++++++++ hw/virtio/trace-events | 1 + 2 files changed, 45 insertions(+) diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 88849aa7b9..747e3cf1da 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -770,6 +770,49 @@ static void virtio_iommu_set_page_size_mask(IOMMUMemor= yRegion *mr, sdev->page_size_mask =3D page_size_mask; } =20 +static gboolean virtio_iommu_remap(gpointer key, gpointer value, gpointer = data) +{ + VirtIOIOMMUMapping *mapping =3D (VirtIOIOMMUMapping *) value; + VirtIOIOMMUInterval *interval =3D (VirtIOIOMMUInterval *) key; + IOMMUMemoryRegion *mr =3D (IOMMUMemoryRegion *) data; + + trace_virtio_iommu_remap(interval->low, mapping->phys_addr, + interval->high - interval->low + 1); + /* unmap previous entry and map again */ + virtio_iommu_notify_unmap(mr, interval->low, + interval->high - interval->low + 1); + + virtio_iommu_notify_map(mr, interval->low, mapping->phys_addr, + interval->high - interval->low + 1); + return false; +} + +static void virtio_iommu_replay(IOMMUMemoryRegion *mr, IOMMUNotifier *n) +{ + IOMMUDevice *sdev =3D container_of(mr, IOMMUDevice, iommu_mr); + VirtIOIOMMU *s =3D sdev->viommu; + uint32_t sid; + VirtIOIOMMUEndpoint *ep; + + sid =3D virtio_iommu_get_bdf(sdev); + + qemu_mutex_lock(&s->mutex); + + if (!s->endpoints) { + goto unlock; + } + + ep =3D g_tree_lookup(s->endpoints, GUINT_TO_POINTER(sid)); + if (!ep || !ep->domain) { + goto unlock; + } + + g_tree_foreach(ep->domain->mappings, virtio_iommu_remap, mr); + +unlock: + qemu_mutex_unlock(&s->mutex); +} + static void virtio_iommu_device_realize(DeviceState *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); @@ -988,6 +1031,7 @@ static void virtio_iommu_memory_region_class_init(Obje= ctClass *klass, =20 imrc->translate =3D virtio_iommu_translate; imrc->iommu_set_page_size_mask =3D virtio_iommu_set_page_size_mask; + imrc->replay =3D virtio_iommu_replay; } =20 static const TypeInfo virtio_iommu_info =3D { diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events index d94a1cd8a3..8bae651191 100644 --- a/hw/virtio/trace-events +++ b/hw/virtio/trace-events @@ -75,3 +75,4 @@ virtio_iommu_translate_out(uint64_t virt_addr, uint64_t p= hys_addr, uint32_t sid) virtio_iommu_report_fault(uint8_t reason, uint32_t flags, uint32_t endpoin= t, uint64_t addr) "FAULT reason=3D%d flags=3D%d endpoint=3D%d address =3D0x= %"PRIx64 virtio_iommu_notify_map(const char *name, uint64_t iova, uint64_t paddr, u= int64_t map_size) "mr=3D%s iova=3D0x%"PRIx64" pa=3D0x%" PRIx64" size=3D0x%"= PRIx64 virtio_iommu_notify_unmap(const char *name, uint64_t iova, uint64_t map_si= ze) "mr=3D%s iova=3D0x%"PRIx64" size=3D0x%"PRIx64 +virtio_iommu_remap(uint64_t iova, uint64_t pa, uint64_t size) "iova=3D0x%"= PRIx64" pa=3D0x%" PRIx64" size=3D0x%"PRIx64"" --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; Authentication-Results: mx.zohomail.com; dkim=fail; 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=fail(p=none dis=none) header.from=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953614; cv=none; d=zohomail.com; s=zohoarc; b=cI3ZbaO/dez9jlu1Md8ATpkNmeZl4dtwvF+kKwZBXn95s7mMQXmp+hTg97GFaQfVK4FFtFumulgLx+r2X1IntspjFDi9xV3j6syDMc6ptOjF6irXTBB/BRgxe3IlqGlhfkTl+ijT2rFl87mxwJtsny6eH2UvGwjrtB6SE/Ic1Dg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953614; h=Content-Type:Cc: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=2gCNoHyGjv63XzmeUOxsBCZMChV7RLhevIlNw3CI/5Q=; b=CkaYW/zjWzq7PXwDBZ6ynkuEI9uJzV/2lLaAw6PJPriYQE7fm0N9EDlSqJpHzb/Cb3eyAzX+QHOya9XyDQq46RGtqwOYrJclhUHQnfs/tOzZkcBlzSYinMVwQi35gp8xL0nNeaeCUzkRAMEAcTPnDW37H/b/xOKggyThC8PZJeU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; 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=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953614691345.33044042413724; Mon, 23 Mar 2020 01:53:34 -0700 (PDT) Received: from localhost ([::1]:58778 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIpx-0000YX-2w for importer@patchew.org; Mon, 23 Mar 2020 04:53:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48542) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIjw-0000LZ-IM for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIju-0003J6-C1 for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:20 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:64092 helo=mx0b-0016f401.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIju-0003Iq-2G; Mon, 23 Mar 2020 04:47:18 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8debD010645; Mon, 23 Mar 2020 01:47:15 -0700 Received: from sc-exch03.marvell.com ([199.233.58.183]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9ndrxa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:47:15 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:47:14 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:47:13 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:47:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=2gCNoHyGjv63XzmeUOxsBCZMChV7RLhevIlNw3CI/5Q=; b=R0mN9ycVVvxMcHi6wn0JiHwR/sPn1dzzi6pbPNlLf42UCSAuaFG107axT9vSqBQb/uRl 7zGLxr132vakEwfejHpAhZVzTfkO3xfFo+USWCKklSYmF+MwCCksgAPX7QM8C2F5qSlV LjiuOVmwzhI3feOdOyIMTrldv791DrJha1RtrXupCTfDPWlWHh7h9nsRiUk7vLjLqCtJ YdI3GNY24gDFXlSWoLywzIhXUZImjUdEFW7WG7jOFGkI6OWS6fr9nWH5WQ/fPCC6TjS/ pg1//FTeRg4Fa3H/AtXy8ZSvQvYMRad4WCGEcNsQHnFFhOaQiZD5kh/F3p34463tmIY1 SA== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 8/9] virtio-iommu: Implement probe request Date: Mon, 23 Mar 2020 14:16:16 +0530 Message-ID: <20200323084617.1782-9-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.148.174 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eric Auger , Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch implements the PROBE request. Currently supported page size mask per endpoint is returned. Also append a NONE property in the end. Signed-off-by: Bharat Bhushan Signed-off-by: Eric Auger --- include/standard-headers/linux/virtio_iommu.h | 6 + hw/virtio/virtio-iommu.c | 161 +++++++++++++++++- hw/virtio/trace-events | 2 + 3 files changed, 166 insertions(+), 3 deletions(-) diff --git a/include/standard-headers/linux/virtio_iommu.h b/include/standa= rd-headers/linux/virtio_iommu.h index b9443b83a1..8a0d47b907 100644 --- a/include/standard-headers/linux/virtio_iommu.h +++ b/include/standard-headers/linux/virtio_iommu.h @@ -111,6 +111,7 @@ struct virtio_iommu_req_unmap { =20 #define VIRTIO_IOMMU_PROBE_T_NONE 0 #define VIRTIO_IOMMU_PROBE_T_RESV_MEM 1 +#define VIRTIO_IOMMU_PROBE_T_PAGE_SIZE_MASK 2 =20 #define VIRTIO_IOMMU_PROBE_T_MASK 0xfff =20 @@ -130,6 +131,11 @@ struct virtio_iommu_probe_resv_mem { uint64_t end; }; =20 +struct virtio_iommu_probe_pgsize_mask { + struct virtio_iommu_probe_property head; + uint64_t pgsize_bitmap; +}; + struct virtio_iommu_req_probe { struct virtio_iommu_req_head head; uint32_t endpoint; diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 747e3cf1da..63fbacdcdc 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -38,6 +38,10 @@ =20 /* Max size */ #define VIOMMU_DEFAULT_QUEUE_SIZE 256 +#define VIOMMU_PROBE_SIZE 512 + +#define SUPPORTED_PROBE_PROPERTIES (\ + 1 << VIRTIO_IOMMU_PROBE_T_PAGE_SIZE_MASK) =20 typedef struct VirtIOIOMMUDomain { uint32_t id; @@ -62,6 +66,13 @@ typedef struct VirtIOIOMMUMapping { uint32_t flags; } VirtIOIOMMUMapping; =20 +typedef struct VirtIOIOMMUPropBuffer { + VirtIOIOMMUEndpoint *endpoint; + size_t filled; + uint8_t *start; + bool error; +} VirtIOIOMMUPropBuffer; + static inline uint16_t virtio_iommu_get_bdf(IOMMUDevice *dev) { return PCI_BUILD_BDF(pci_bus_num(dev->bus), dev->devfn); @@ -490,6 +501,114 @@ static int virtio_iommu_unmap(VirtIOIOMMU *s, return ret; } =20 +static int virtio_iommu_fill_none_prop(VirtIOIOMMUPropBuffer *bufstate) +{ + struct virtio_iommu_probe_property *prop; + + prop =3D (struct virtio_iommu_probe_property *) + (bufstate->start + bufstate->filled); + prop->type =3D 0; + prop->length =3D 0; + bufstate->filled +=3D sizeof(*prop); + trace_virtio_iommu_fill_none_property(bufstate->endpoint->id); + return 0; +} + +static int virtio_iommu_fill_page_size_mask(VirtIOIOMMUPropBuffer *bufstat= e) +{ + struct virtio_iommu_probe_pgsize_mask *page_size_mask; + size_t prop_size =3D sizeof(*page_size_mask); + VirtIOIOMMUEndpoint *ep =3D bufstate->endpoint; + VirtIOIOMMU *s =3D ep->viommu; + IOMMUDevice *sdev; + + if (bufstate->filled + prop_size >=3D VIOMMU_PROBE_SIZE) { + bufstate->error =3D true; + /* get the traversal stopped by returning true */ + return true; + } + + page_size_mask =3D (struct virtio_iommu_probe_pgsize_mask *) + (bufstate->start + bufstate->filled); + + page_size_mask->head.type =3D VIRTIO_IOMMU_PROBE_T_PAGE_SIZE_MASK; + page_size_mask->head.length =3D prop_size; + QLIST_FOREACH(sdev, &s->notifiers_list, next) { + if (ep->id =3D=3D sdev->devfn) { + page_size_mask->pgsize_bitmap =3D sdev->page_size_mask; + } + } + bufstate->filled +=3D sizeof(*page_size_mask); + trace_virtio_iommu_fill_pgsize_mask_property(bufstate->endpoint->id, + page_size_mask->pgsize_bi= tmap, + bufstate->filled); + return false; +} + +/* Fill the properties[] buffer with properties of type @type */ +static int virtio_iommu_fill_property(int type, + VirtIOIOMMUPropBuffer *bufstate) +{ + int ret =3D -ENOSPC; + + if (bufstate->filled + sizeof(struct virtio_iommu_probe_property) + >=3D VIOMMU_PROBE_SIZE) { + /* no space left for the header */ + bufstate->error =3D true; + goto out; + } + + switch (type) { + case VIRTIO_IOMMU_PROBE_T_NONE: + ret =3D virtio_iommu_fill_none_prop(bufstate); + break; + case VIRTIO_IOMMU_PROBE_T_PAGE_SIZE_MASK: + { + ret =3D virtio_iommu_fill_page_size_mask(bufstate); + break; + } + default: + ret =3D -ENOENT; + break; + } +out: + if (ret) { + error_report("%s property of type=3D%d could not be filled (%d)," + " remaining size =3D 0x%lx", + __func__, type, ret, bufstate->filled); + } + return ret; +} + +/** + * virtio_iommu_probe - Fill the probe request buffer with all + * the properties the device is able to return and add a NONE + * property at the end. @buf points to properties[]. + */ +static int virtio_iommu_probe(VirtIOIOMMU *s, + struct virtio_iommu_req_probe *req, + uint8_t *buf) +{ + uint32_t ep_id =3D le32_to_cpu(req->endpoint); + VirtIOIOMMUEndpoint *ep =3D virtio_iommu_get_endpoint(s, ep_id); + int16_t prop_types =3D SUPPORTED_PROBE_PROPERTIES, type; + VirtIOIOMMUPropBuffer bufstate =3D {.start =3D buf, .filled =3D 0, + .error =3D false, .endpoint =3D ep}; + + while ((type =3D ctz32(prop_types)) !=3D 32) { + if (virtio_iommu_fill_property(type, &bufstate)) { + goto failure; + } + prop_types &=3D ~(1 << type); + } + if (virtio_iommu_fill_property(VIRTIO_IOMMU_PROBE_T_NONE, &bufstate)) { + goto failure; + } + return VIRTIO_IOMMU_S_OK; +failure: + return VIRTIO_IOMMU_S_INVAL; +} + static int virtio_iommu_iov_to_req(struct iovec *iov, unsigned int iov_cnt, void *req, size_t req_sz) @@ -519,6 +638,17 @@ virtio_iommu_handle_req(detach) virtio_iommu_handle_req(map) virtio_iommu_handle_req(unmap) =20 +static int virtio_iommu_handle_probe(VirtIOIOMMU *s, + struct iovec *iov, + unsigned int iov_cnt, + uint8_t *buf) +{ + struct virtio_iommu_req_probe req; + int ret =3D virtio_iommu_iov_to_req(iov, iov_cnt, &req, sizeof(req)); + + return ret ? ret : virtio_iommu_probe(s, &req, buf); +} + static void virtio_iommu_handle_command(VirtIODevice *vdev, VirtQueue *vq) { VirtIOIOMMU *s =3D VIRTIO_IOMMU(vdev); @@ -564,17 +694,33 @@ static void virtio_iommu_handle_command(VirtIODevice = *vdev, VirtQueue *vq) case VIRTIO_IOMMU_T_UNMAP: tail.status =3D virtio_iommu_handle_unmap(s, iov, iov_cnt); break; + case VIRTIO_IOMMU_T_PROBE: + { + struct virtio_iommu_req_tail *ptail; + uint8_t *buf =3D g_malloc0(s->config.probe_size + sizeof(tail)= ); + + ptail =3D (struct virtio_iommu_req_tail *) + (buf + s->config.probe_size); + ptail->status =3D virtio_iommu_handle_probe(s, iov, iov_cnt, b= uf); + + sz =3D iov_from_buf(elem->in_sg, elem->in_num, 0, + buf, s->config.probe_size + sizeof(tail)); + g_free(buf); + assert(sz =3D=3D s->config.probe_size + sizeof(tail)); + goto push; + } default: tail.status =3D VIRTIO_IOMMU_S_UNSUPP; } - qemu_mutex_unlock(&s->mutex); =20 out: sz =3D iov_from_buf(elem->in_sg, elem->in_num, 0, &tail, sizeof(tail)); assert(sz =3D=3D sizeof(tail)); =20 - virtqueue_push(vq, elem, sizeof(tail)); +push: + qemu_mutex_unlock(&s->mutex); + virtqueue_push(vq, elem, sz); virtio_notify(vdev, vq); g_free(elem); } @@ -634,16 +780,23 @@ static IOMMUTLBEntry virtio_iommu_translate(IOMMUMemo= ryRegion *mr, hwaddr addr, VirtIOIOMMUEndpoint *ep; uint32_t sid, flags; bool bypass_allowed; + hwaddr addr_mask; bool found; =20 interval.low =3D addr; interval.high =3D addr + 1; =20 + if (sdev->page_size_mask) { + addr_mask =3D (1 << ctz32(sdev->page_size_mask)) - 1; + } else { + addr_mask =3D (1 << ctz32(s->config.page_size_mask)) - 1; + } + IOMMUTLBEntry entry =3D { .target_as =3D &address_space_memory, .iova =3D addr, .translated_addr =3D addr, - .addr_mask =3D (1 << ctz32(s->config.page_size_mask)) - 1, + .addr_mask =3D addr_mask, .perm =3D IOMMU_NONE, }; =20 @@ -831,6 +984,7 @@ static void virtio_iommu_device_realize(DeviceState *de= v, Error **errp) s->config.page_size_mask =3D TARGET_PAGE_MASK; s->config.input_range.end =3D -1UL; s->config.domain_range.end =3D 32; + s->config.probe_size =3D VIOMMU_PROBE_SIZE; =20 virtio_add_feature(&s->features, VIRTIO_RING_F_EVENT_IDX); virtio_add_feature(&s->features, VIRTIO_RING_F_INDIRECT_DESC); @@ -840,6 +994,7 @@ static void virtio_iommu_device_realize(DeviceState *de= v, Error **errp) virtio_add_feature(&s->features, VIRTIO_IOMMU_F_MAP_UNMAP); virtio_add_feature(&s->features, VIRTIO_IOMMU_F_BYPASS); virtio_add_feature(&s->features, VIRTIO_IOMMU_F_MMIO); + virtio_add_feature(&s->features, VIRTIO_IOMMU_F_PROBE); =20 qemu_mutex_init(&s->mutex); =20 diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events index 8bae651191..b0a6e4bda3 100644 --- a/hw/virtio/trace-events +++ b/hw/virtio/trace-events @@ -76,3 +76,5 @@ virtio_iommu_report_fault(uint8_t reason, uint32_t flags,= uint32_t endpoint, uin virtio_iommu_notify_map(const char *name, uint64_t iova, uint64_t paddr, u= int64_t map_size) "mr=3D%s iova=3D0x%"PRIx64" pa=3D0x%" PRIx64" size=3D0x%"= PRIx64 virtio_iommu_notify_unmap(const char *name, uint64_t iova, uint64_t map_si= ze) "mr=3D%s iova=3D0x%"PRIx64" size=3D0x%"PRIx64 virtio_iommu_remap(uint64_t iova, uint64_t pa, uint64_t size) "iova=3D0x%"= PRIx64" pa=3D0x%" PRIx64" size=3D0x%"PRIx64"" +virtio_iommu_fill_none_property(uint32_t devid) "devid=3D%d" +virtio_iommu_fill_pgsize_mask_property(uint32_t devid, uint64_t pgsize_mas= k, size_t filled) "dev=3D %d, pgsize_mask=3D0x%"PRIx64" filled=3D0x%lx" --=20 2.17.1 From nobody Mon May 6 02:18:24 2024 Delivered-To: importer@patchew.org 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; 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=marvell.com ARC-Seal: i=1; a=rsa-sha256; t=1584953600; cv=none; d=zohomail.com; s=zohoarc; b=JxwawKJ2YqaVFnkacyDnIkGgt3la0X1h55Ifh2L7PXzQznzinlqa4Wi0FsNTWtcs7ZReAm8X/Qs//5ePykkK4T2RqXoWnS/H3Ar9IX9ohAZpQWvaKKc1eVjwtJAQgew8jdcxPTYnKeGGbsv3+nj2Gxg1GfGM1EsZ+3qGpBqf/Nw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584953600; h=Content-Type:Cc: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=5VTq8e0BSvrMkvHbeSM4C11NEHq1CPgbCZcb3DuRCxY=; b=BrqaVCgv81bXmxqBIu6ceUCSUCfUD+dt3Ll2yhnuhkzWKVSBerBzb4yRWAayYoskuIPldkEn3MmjwxBD/aXYUNyxwK9uYhHNPgjJqGEajciVWtVmC3X2dwsF8FlwuLavQWJYqYK1Af7ed/KR5TbD8FP/B5C4z3pctB68TOWdR/o= 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) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1584953600268794.9309342464611; Mon, 23 Mar 2020 01:53:20 -0700 (PDT) Received: from localhost ([::1]:58774 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIpj-0000EU-0v for importer@patchew.org; Mon, 23 Mar 2020 04:53:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48565) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jGIk0-0000SC-6Z for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jGIjy-0003KR-Od for qemu-devel@nongnu.org; Mon, 23 Mar 2020 04:47:24 -0400 Received: from mx0a-0016f401.pphosted.com ([67.231.148.174]:61632 helo=mx0b-0016f401.pphosted.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jGIjy-0003Jy-Fh; Mon, 23 Mar 2020 04:47:22 -0400 Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02N8dp6q010660; Mon, 23 Mar 2020 01:47:20 -0700 Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 2ywg9ndrxf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 23 Mar 2020 01:47:20 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 23 Mar 2020 01:47:18 -0700 Received: from bbhushan2.marvell.com (10.93.176.43) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 23 Mar 2020 01:47:14 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=pfpt0818; bh=5VTq8e0BSvrMkvHbeSM4C11NEHq1CPgbCZcb3DuRCxY=; b=DReW+a55AYrVaKcxG1LS5CFy/bOsAFdDsatQM6+9vXnnij6G/3LAN378XuCffyfZyizm KNDnZmTxF801KKD7i494uf3Wq7k5WM+YLUeQkw94+DIxRCukaD5vNMnkUl5jOG0GlAKE 4GPDPZPyc9TZm64bBzN5vqleRr6OAVFv1EVsIrtvP5wALtzkXyD67Tr6XrhYNg9AOxjt T1/zNh4rUdjpHaDAymhxqDd4eCqqdtjOqK5ErdZqb6vd2KBSG9ofzD8pW+7juDfwP8wy n7ELydL6WnqCDivblf9fJ8x1IXB5YCz6ijMvA/XQ2+KqHFqKOLdpJDic20nR5XCTa95l lw== From: Bharat Bhushan To: , , , , , , , , , , , , , Subject: [PATCH v9 9/9] virtio-iommu: add iommu notifier memory-region Date: Mon, 23 Mar 2020 14:16:17 +0530 Message-ID: <20200323084617.1782-10-bbhushan2@marvell.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200323084617.1782-1-bbhushan2@marvell.com> References: <20200323084617.1782-1-bbhushan2@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-23_02:2020-03-21, 2020-03-23 signatures=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 67.231.148.174 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Bharat Bhushan Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @marvell.com) Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Finally add notify_flag_changed() to for memory-region access flag iommu flag change notifier Finally add the memory notifier Signed-off-by: Bharat Bhushan --- hw/virtio/virtio-iommu.c | 22 ++++++++++++++++++++++ hw/virtio/trace-events | 2 ++ 2 files changed, 24 insertions(+) diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c index 63fbacdcdc..413792b626 100644 --- a/hw/virtio/virtio-iommu.c +++ b/hw/virtio/virtio-iommu.c @@ -966,6 +966,27 @@ unlock: qemu_mutex_unlock(&s->mutex); } =20 +static int virtio_iommu_notify_flag_changed(IOMMUMemoryRegion *iommu_mr, + IOMMUNotifierFlag old, + IOMMUNotifierFlag new, + Error **errp) +{ + IOMMUDevice *sdev =3D container_of(iommu_mr, IOMMUDevice, iommu_mr); + VirtIOIOMMU *s =3D sdev->viommu; + + if (old =3D=3D IOMMU_NOTIFIER_NONE) { + trace_virtio_iommu_notify_flag_add(iommu_mr->parent_obj.name); + QLIST_INSERT_HEAD(&s->notifiers_list, sdev, next); + return 0; + } + + if (new =3D=3D IOMMU_NOTIFIER_NONE) { + trace_virtio_iommu_notify_flag_del(iommu_mr->parent_obj.name); + QLIST_REMOVE(sdev, next); + } + return 0; +} + static void virtio_iommu_device_realize(DeviceState *dev, Error **errp) { VirtIODevice *vdev =3D VIRTIO_DEVICE(dev); @@ -1187,6 +1208,7 @@ static void virtio_iommu_memory_region_class_init(Obj= ectClass *klass, imrc->translate =3D virtio_iommu_translate; imrc->iommu_set_page_size_mask =3D virtio_iommu_set_page_size_mask; imrc->replay =3D virtio_iommu_replay; + imrc->notify_flag_changed =3D virtio_iommu_notify_flag_changed; } =20 static const TypeInfo virtio_iommu_info =3D { diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events index b0a6e4bda3..6b7495ac3d 100644 --- a/hw/virtio/trace-events +++ b/hw/virtio/trace-events @@ -78,3 +78,5 @@ virtio_iommu_notify_unmap(const char *name, uint64_t iova= , uint64_t map_size) "m virtio_iommu_remap(uint64_t iova, uint64_t pa, uint64_t size) "iova=3D0x%"= PRIx64" pa=3D0x%" PRIx64" size=3D0x%"PRIx64"" virtio_iommu_fill_none_property(uint32_t devid) "devid=3D%d" virtio_iommu_fill_pgsize_mask_property(uint32_t devid, uint64_t pgsize_mas= k, size_t filled) "dev=3D %d, pgsize_mask=3D0x%"PRIx64" filled=3D0x%lx" +virtio_iommu_notify_flag_add(const char *iommu) "Add virtio-iommu notifier= node for memory region %s" +virtio_iommu_notify_flag_del(const char *iommu) "Del virtio-iommu notifier= node for memory region %s" --=20 2.17.1