From nobody Sat May 9 09:08:50 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD194224B12; Fri, 24 Jan 2025 20:18:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749924; cv=none; b=OHLi4aYt6lXo9SZ9AIZbXZFKExj6nipUTliYF6+I1Pvn6Y5xQi2QZSSIOxdK7BvsfzNXPE3LWLeDxQZmZ6xv3OJ6y6NlfjlkQXOSkXHk1afD5LDSaG039IQl+1zDxJze6vK2Y96bsuVB2kLsrCWQJ64cAY4e2Dl/y+ItcPienls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749924; c=relaxed/simple; bh=bvMjnLeFUN+M5B4l5iLRZleuenVFi+O25BD0Qi/scu4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PPtc7t7RN3kxkpyfaeoQ6rwhk6Bh6uqnYNgLeUUxo3WpsaX6FXkq/Y+5gjis6O6/wp8/ypf8x1m4MtEOE16abed6EQhnEKHqyFvMUKJzgaqIhXO8cMW6/J1L15EEBnJwZCvMfNtBuebqkZbsqfXH6AhPC5byjuE0Io3AvCYQjGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=SEyzdr8P; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="SEyzdr8P" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50OF1PKf017785; Fri, 24 Jan 2025 20:18:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=UpquvV7aFReF5Cfa9 Q/M1OLEKHeSkkomPr+QtuqkH9A=; b=SEyzdr8Pe4ugLZKzC0AWwiMm4U+dso+Ju RLVdppiqcVQqlvFZNiKMPD/RXPfyX+nPOyzgjZvO0iSrgxqA8B7Smi2iYXsbv1d5 RCEFmnpP1Woi/BwgXljPKm5Ojf23KGApD+nfFn4s4yz6zE+xex4k/sFmQns4R7zW 0i8ufZC0TTChA32XXliv4uQYgBwpJbVFUjnwvFGCQ7bwrGFNGiRKd/zaRJAIs1B4 6/nBcNBi1TsHjIb+/uLRxzlcO7chCvw+8MUI7T6ntWTePygtuxPmWp6LaFTvRfzH Z13hD4jRBsOfrAGleSn9zutcQHZXXVjod/nYp70g9H4zAj6o/geiw== Received: from ppma22.wdc07v.mail.ibm.com (5c.69.3da9.ip4.static.sl-reverse.com [169.61.105.92]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44cd4yhjeu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:32 +0000 (GMT) Received: from pps.filterd (ppma22.wdc07v.mail.ibm.com [127.0.0.1]) by ppma22.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 50OIZXlk024268; Fri, 24 Jan 2025 20:18:31 GMT Received: from smtprelay05.dal12v.mail.ibm.com ([172.16.1.7]) by ppma22.wdc07v.mail.ibm.com (PPS) with ESMTPS id 448q0yndrd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:31 +0000 Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay05.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 50OKITxh26739222 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2025 20:18:30 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D21625805C; Fri, 24 Jan 2025 20:18:29 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D3E3958051; Fri, 24 Jan 2025 20:18:28 +0000 (GMT) Received: from li-2311da4c-2e09-11b2-a85c-c003041e9174.ibm.com.com (unknown [9.61.77.196]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 24 Jan 2025 20:18:28 +0000 (GMT) From: Matthew Rosato To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com Cc: hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, svens@linux.ibm.com, borntraeger@linux.ibm.com, clegoate@redhat.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 1/6] iommu/s390: add initial fields to track table size Date: Fri, 24 Jan 2025 15:18:21 -0500 Message-ID: <20250124201826.348848-2-mjrosato@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250124201826.348848-1-mjrosato@linux.ibm.com> References: <20250124201826.348848-1-mjrosato@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: rUzAyt6Vlxjb7BewzUqI08w0aHlk9YUY X-Proofpoint-ORIG-GUID: rUzAyt6Vlxjb7BewzUqI08w0aHlk9YUY X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-24_08,2025-01-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 impostorscore=0 mlxlogscore=999 priorityscore=1501 adultscore=0 malwarescore=0 phishscore=0 mlxscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2411120000 definitions=main-2501240137 Content-Type: text/plain; charset="utf-8" In preparation for allowing for additional table levels, add the necessary information to the zdev and s390 domain to track table type. For now, these values will always be set to signify a region third table which is what s390-iommu always uses today. Signed-off-by: Matthew Rosato --- arch/s390/include/asm/pci.h | 2 ++ drivers/iommu/s390-iommu.c | 17 +++++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/arch/s390/include/asm/pci.h b/arch/s390/include/asm/pci.h index 474e1f8d1d3c..8f8ebaeec60a 100644 --- a/arch/s390/include/asm/pci.h +++ b/arch/s390/include/asm/pci.h @@ -189,6 +189,8 @@ struct zpci_dev { struct kvm_zdev *kzdev; struct mutex kzdev_lock; spinlock_t dom_lock; /* protect s390_domain change */ + u64 max_table_size; + u8 origin_type; }; =20 static inline bool zdev_enabled(struct zpci_dev *zdev) diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c index fbdeded3d48b..f6c27b6ab4c6 100644 --- a/drivers/iommu/s390-iommu.c +++ b/drivers/iommu/s390-iommu.c @@ -31,6 +31,7 @@ struct s390_domain { unsigned long *dma_table; spinlock_t list_lock; struct rcu_head rcu; + u8 origin_type; }; =20 static struct iommu_domain blocking_domain; @@ -331,6 +332,7 @@ static bool s390_iommu_capable(struct device *dev, enum= iommu_cap cap) =20 static struct iommu_domain *s390_domain_alloc_paging(struct device *dev) { + struct zpci_dev *zdev =3D to_zpci_dev(dev); struct s390_domain *s390_domain; =20 s390_domain =3D kzalloc(sizeof(*s390_domain), GFP_KERNEL); @@ -344,7 +346,8 @@ static struct iommu_domain *s390_domain_alloc_paging(st= ruct device *dev) } s390_domain->domain.geometry.force_aperture =3D true; s390_domain->domain.geometry.aperture_start =3D 0; - s390_domain->domain.geometry.aperture_end =3D ZPCI_TABLE_SIZE_RT - 1; + s390_domain->domain.geometry.aperture_end =3D zdev->max_table_size; + s390_domain->origin_type =3D zdev->origin_type; =20 spin_lock_init(&s390_domain->list_lock); INIT_LIST_HEAD_RCU(&s390_domain->devices); @@ -450,9 +453,9 @@ static void s390_iommu_get_resv_regions(struct device *= dev, list_add_tail(®ion->list, list); } =20 - if (zdev->end_dma < ZPCI_TABLE_SIZE_RT - 1) { + if (zdev->end_dma < zdev->max_table_size) { region =3D iommu_alloc_resv_region(zdev->end_dma + 1, - ZPCI_TABLE_SIZE_RT - zdev->end_dma - 1, + zdev->max_table_size - zdev->end_dma, 0, IOMMU_RESV_RESERVED, GFP_KERNEL); if (!region) return; @@ -470,11 +473,11 @@ static struct iommu_device *s390_iommu_probe_device(s= truct device *dev) zdev =3D to_zpci_dev(dev); =20 if (zdev->start_dma > zdev->end_dma || - zdev->start_dma > ZPCI_TABLE_SIZE_RT - 1) + zdev->start_dma > zdev->max_table_size) return ERR_PTR(-EINVAL); =20 - if (zdev->end_dma > ZPCI_TABLE_SIZE_RT - 1) - zdev->end_dma =3D ZPCI_TABLE_SIZE_RT - 1; + if (zdev->end_dma > zdev->max_table_size) + zdev->end_dma =3D zdev->max_table_size; =20 if (zdev->tlb_refresh) dev->iommu->shadow_on_flush =3D 1; @@ -732,6 +735,8 @@ int zpci_init_iommu(struct zpci_dev *zdev) ZPCI_TABLE_SIZE_RT - zdev->start_dma, zdev->end_dma - zdev->start_dma + 1); zdev->end_dma =3D zdev->start_dma + aperture_size - 1; + zdev->origin_type =3D ZPCI_TABLE_TYPE_RTX; + zdev->max_table_size =3D ZPCI_TABLE_SIZE_RT - 1; =20 return 0; =20 --=20 2.48.1 From nobody Sat May 9 09:08:50 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8197224B17; Fri, 24 Jan 2025 20:18:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749924; cv=none; b=r2TpUK/ktaeYsyabmWJMfKL8fiXw8S1579lmgBSoHx1yc3XVcCAfWweAk719UgDqyidF8phvBr42b9cZ/97viSk0nYWk8PuIOIqsT9kzXvydvzY4SFa1BPRFYohtt82PRwqG2uoP5dJ4S8P4nmg4+DZk61wlgXzZrHRCf+p2WgI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749924; c=relaxed/simple; bh=gFJlh5FpxadZvFF3Fp2bfM3iiP6nkjXh+Fp/SHKkURw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lua95gPoVcyKQSrYyelPKcZfGg4oTVjysrdGJhL1uGtKZ0hyREYNpDwHA39Le8pSlcaG6IE2wYVMtCiWWovRk35JBLbXlQ08Nq1uB17YCvF9Nik/nr1AzQvn3X+S0tPq8FjGIcR8KEaFvxQeGBNJhjgyYOu6i8NuSsLa+9irxAM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=rW6Pqu6L; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="rW6Pqu6L" Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50OF1LXW017670; Fri, 24 Jan 2025 20:18:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=Z9hyEFCw+pPfD8qKo QnIAw7Ga05MM/IzXe254/5QcuY=; b=rW6Pqu6LCvt6xv7ycadYyUb3WpaBWhzd3 vpHdnd8V0K3ewk80nZhebh7nW9UZgCSH9iRbHoroUhBqgOkXfnk3cWeyUYc53/Fq RAQ/ysFxdoDqE6+gHXDmYZ/7GwU4+Ytt4SxU4Ys8/tzOT3kI2rrmRszy8XoIb82D 01n4hU9lXk9XvRy49WKyLDmz/sX2cbIe0I/PfZFOluq9Pzky84HLvOtK811dDhmK e34Nlq8f2LMEP9/eOkyPLW9HYDNfKE8wBftGD3j1oDgJv4C1z2JFVsRC54KuP7Ef +FtKQsXts5FAePuRgBOFUwESI3r3rKuIt6NAED07olMSRZJHJhWEw== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44cd4yhjey-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:32 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 50OH7SpP032266; Fri, 24 Jan 2025 20:18:31 GMT Received: from smtprelay06.dal12v.mail.ibm.com ([172.16.1.8]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 448ruk4wcr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:31 +0000 Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay06.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 50OKIV5525559804 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2025 20:18:31 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0CEAE58051; Fri, 24 Jan 2025 20:18:31 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id F2BDA5805E; Fri, 24 Jan 2025 20:18:29 +0000 (GMT) Received: from li-2311da4c-2e09-11b2-a85c-c003041e9174.ibm.com.com (unknown [9.61.77.196]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 24 Jan 2025 20:18:29 +0000 (GMT) From: Matthew Rosato To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com Cc: hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, svens@linux.ibm.com, borntraeger@linux.ibm.com, clegoate@redhat.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 2/6] s390/pci: set appropriate IOTA region type Date: Fri, 24 Jan 2025 15:18:22 -0500 Message-ID: <20250124201826.348848-3-mjrosato@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250124201826.348848-1-mjrosato@linux.ibm.com> References: <20250124201826.348848-1-mjrosato@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 7J6feF3Qa4MpwosWhym7kHYUkclKfYFJ X-Proofpoint-ORIG-GUID: 7J6feF3Qa4MpwosWhym7kHYUkclKfYFJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-24_08,2025-01-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 lowpriorityscore=0 suspectscore=0 bulkscore=0 impostorscore=0 mlxlogscore=873 priorityscore=1501 adultscore=0 malwarescore=0 phishscore=0 mlxscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2411120000 definitions=main-2501240137 Content-Type: text/plain; charset="utf-8" When registering the I/O Translation Anchor, use the current table type stored in the zdev to set the apporpriate region type indication. Signed-off-by: Matthew Rosato --- arch/s390/pci/pci.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/arch/s390/pci/pci.c b/arch/s390/pci/pci.c index 88f72745fa59..9f7adf913729 100644 --- a/arch/s390/pci/pci.c +++ b/arch/s390/pci/pci.c @@ -116,6 +116,21 @@ int pci_proc_domain(struct pci_bus *bus) } EXPORT_SYMBOL_GPL(pci_proc_domain); =20 +static u64 zpci_get_iota_region_flag(struct zpci_dev *zdev) +{ + switch (zdev->origin_type) { + case ZPCI_TABLE_TYPE_RTX: + return ZPCI_IOTA_RTTO_FLAG; + case ZPCI_TABLE_TYPE_RSX: + return ZPCI_IOTA_RSTO_FLAG; + case ZPCI_TABLE_TYPE_RFX: + return ZPCI_IOTA_RFTO_FLAG; + default: + WARN_ONCE(1, "Invalid IOMMU table (%x)\n", zdev->origin_type); + return 0; + } +} + /* Modify PCI: Register I/O address translation parameters */ int zpci_register_ioat(struct zpci_dev *zdev, u8 dmaas, u64 base, u64 limit, u64 iota, u8 *status) @@ -131,7 +146,7 @@ int zpci_register_ioat(struct zpci_dev *zdev, u8 dmaas, fib.pal =3D limit + (1 << 12); else fib.pal =3D limit; - fib.iota =3D iota | ZPCI_IOTA_RTTO_FLAG; + fib.iota =3D iota | zpci_get_iota_region_flag(zdev); fib.gd =3D zdev->gisa; cc =3D zpci_mod_fc(req, &fib, status); if (cc) --=20 2.48.1 From nobody Sat May 9 09:08:50 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 20C2B225404; Fri, 24 Jan 2025 20:18:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749926; cv=none; b=ZOoW6UnoimPljlMUz64Kw7PL7l4pqBwLilY5Q3q++l7dcnizCPEA285yeGIfHludwjAw2dfsPkY/09ZYqRvWgXPCJpW4yu5X6TQpn1Sn2iX5oComkpNXbTVeEkpsMGeLzWj4ZgCeQEVZm5SaojQWN+LB1junXL7hI9rL5iYmEeg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749926; c=relaxed/simple; bh=VE3J1qYxygN5NqmC7J2Q3Rd5fW013kBKF9K1qwgoVQY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J+ds0ZS92VwKUmlSJSdUotYfOxk3g1weoytooOWkCRYes9vyMis0OxPseuEBq4jLfZmmwSAyghQYhB9l2BHqUIZ91b95x/YYoi0b46g9HLtHY11wBtBfvzsRWfBZ/VlNomJU8OXcz1QDIBKr5XvJLUKPA1XDGKu621YiYQJyzNc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=lR/MKtGo; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="lR/MKtGo" Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50OFdVmH013414; Fri, 24 Jan 2025 20:18:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=1PXToSejdwMJ2Amf4 jcNnC+jyWBjEmkr2SE2zrvyRG8=; b=lR/MKtGoyBtzxTGlrC57Wr2o0Jcf6e2QY /QIBwJmUxfuYemIpuKyOQMbUDPKioOJr9pQd/1pRfet+RfRjB617LRPf9GYbqeZi hWwOtyWMy9Jng/iMtwKXfqavsC99rehvxHoQQFh52BPCe+je/ujp2OpaDYm3zO9v 8ZHI0ZRckWn78ZSq2Jw4Nf5rOkjBCrWUXIbNNX6n/dpyut/NQnvSyN3RCtB8nU+D dvLMsYoUfN+L54QuK0/prYjpJ+7e9r75bQCKEuLj18orCs7H7dI4N+KQ6maBX4Rh hnSkr3NcqPwe8Fm5TS4uBOYFjg7WVI8eAz+CcU73ofV6e/IggXapw== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44cdptsaua-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:33 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 50OHFS9D021012; Fri, 24 Jan 2025 20:18:32 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 448sb1vwsb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:32 +0000 Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 50OKIWfK10748506 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2025 20:18:32 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1D7A45805C; Fri, 24 Jan 2025 20:18:32 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 278395805A; Fri, 24 Jan 2025 20:18:31 +0000 (GMT) Received: from li-2311da4c-2e09-11b2-a85c-c003041e9174.ibm.com.com (unknown [9.61.77.196]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 24 Jan 2025 20:18:31 +0000 (GMT) From: Matthew Rosato To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com Cc: hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, svens@linux.ibm.com, borntraeger@linux.ibm.com, clegoate@redhat.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 3/6] iommu/s390: support cleanup of additional table regions Date: Fri, 24 Jan 2025 15:18:23 -0500 Message-ID: <20250124201826.348848-4-mjrosato@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250124201826.348848-1-mjrosato@linux.ibm.com> References: <20250124201826.348848-1-mjrosato@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: CHby4ew6z2MLYC2kdTWof3nIlN-ZKYQe X-Proofpoint-GUID: CHby4ew6z2MLYC2kdTWof3nIlN-ZKYQe X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-24_08,2025-01-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 mlxlogscore=970 mlxscore=0 malwarescore=0 spamscore=0 suspectscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2411120000 definitions=main-2501240137 Content-Type: text/plain; charset="utf-8" Extend the existing dma_cleanup_tables to also handle region second and region first tables. Signed-off-by: Matthew Rosato --- drivers/iommu/s390-iommu.c | 71 ++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c index f6c27b6ab4c6..73e0bb251bc1 100644 --- a/drivers/iommu/s390-iommu.c +++ b/drivers/iommu/s390-iommu.c @@ -121,6 +121,22 @@ static inline int pt_entry_isvalid(unsigned long entry) return (entry & ZPCI_PTE_VALID_MASK) =3D=3D ZPCI_PTE_VALID; } =20 +static inline unsigned long *get_rf_rso(unsigned long entry) +{ + if ((entry & ZPCI_TABLE_TYPE_MASK) =3D=3D ZPCI_TABLE_TYPE_RFX) + return phys_to_virt(entry & ZPCI_RTE_ADDR_MASK); + else + return NULL; +} + +static inline unsigned long *get_rs_rto(unsigned long entry) +{ + if ((entry & ZPCI_TABLE_TYPE_MASK) =3D=3D ZPCI_TABLE_TYPE_RSX) + return phys_to_virt(entry & ZPCI_RTE_ADDR_MASK); + else + return NULL; +} + static inline unsigned long *get_rt_sto(unsigned long entry) { if ((entry & ZPCI_TABLE_TYPE_MASK) =3D=3D ZPCI_TABLE_TYPE_RTX) @@ -192,18 +208,59 @@ static void dma_free_seg_table(unsigned long entry) dma_free_cpu_table(sto); } =20 -static void dma_cleanup_tables(unsigned long *table) +static void dma_free_rt_table(unsigned long entry) { + unsigned long *rto =3D get_rs_rto(entry); int rtx; =20 - if (!table) + for (rtx =3D 0; rtx < ZPCI_TABLE_ENTRIES; rtx++) + if (reg_entry_isvalid(rto[rtx])) + dma_free_seg_table(rto[rtx]); + + dma_free_cpu_table(rto); +} + +static void dma_free_rs_table(unsigned long entry) +{ + unsigned long *rso =3D get_rf_rso(entry); + int rsx; + + for (rsx =3D 0; rsx < ZPCI_TABLE_ENTRIES; rsx++) + if (reg_entry_isvalid(rso[rsx])) + dma_free_rt_table(rso[rsx]); + + dma_free_cpu_table(rso); +} + +static void dma_cleanup_tables(struct s390_domain *domain) +{ + int rtx, rsx, rfx; + + if (!domain->dma_table) return; =20 - for (rtx =3D 0; rtx < ZPCI_TABLE_ENTRIES; rtx++) - if (reg_entry_isvalid(table[rtx])) - dma_free_seg_table(table[rtx]); + switch (domain->origin_type) { + case ZPCI_TABLE_TYPE_RFX: + for (rfx =3D 0; rfx < ZPCI_TABLE_ENTRIES; rfx++) + if (reg_entry_isvalid(domain->dma_table[rfx])) + dma_free_rs_table(domain->dma_table[rfx]); + break; + case ZPCI_TABLE_TYPE_RSX: + for (rsx =3D 0; rsx < ZPCI_TABLE_ENTRIES; rsx++) + if (reg_entry_isvalid(domain->dma_table[rsx])) + dma_free_rt_table(domain->dma_table[rsx]); + break; + case ZPCI_TABLE_TYPE_RTX: + for (rtx =3D 0; rtx < ZPCI_TABLE_ENTRIES; rtx++) + if (reg_entry_isvalid(domain->dma_table[rtx])) + dma_free_seg_table(domain->dma_table[rtx]); + break; + default: + WARN_ONCE(1, "Invalid IOMMU table (%x)\n", domain->origin_type); + return; + } =20 - dma_free_cpu_table(table); + dma_free_cpu_table(domain->dma_table); } =20 static unsigned long *dma_alloc_page_table(gfp_t gfp) @@ -359,7 +416,7 @@ static void s390_iommu_rcu_free_domain(struct rcu_head = *head) { struct s390_domain *s390_domain =3D container_of(head, struct s390_domain= , rcu); =20 - dma_cleanup_tables(s390_domain->dma_table); + dma_cleanup_tables(s390_domain); kfree(s390_domain); } =20 --=20 2.48.1 From nobody Sat May 9 09:08:50 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A877225778; Fri, 24 Jan 2025 20:18:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749928; cv=none; b=IF8pYWGEagRAhh8c3db7ISUS//7+kiJckyXKrVueGs0vkXPmhqBsfZD81Z7mY0w2zXIYjQMrcaP41AGs0FUWiDFEbN2lqctlr7JRSabFjnRyyMCr7sGT6EFye3eQVc85g9k/BN4NBXHv318P0DPQiujhh+2tNVnJUFA6Nd9dacA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749928; c=relaxed/simple; bh=Ia48zIiJnFbf+IdDzq851ZzRZTHJYFmhXiFMQUuTcAI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GncHP22oZZ1IWmvI7OdjjD34yI/3pFHj4CwaA5G4uCgAvZ55zxiHTWRKRlXvJDEhjiQlHnv00vQEAJNeu3M/pnWsNoqjMcr2I3IGB1QzJ5zbtlVA+K3lKXKvrGaprRdkg2ggIsz2o/dD5oJ6iOLfz4EPtnjJmIL+HdgqMmwxYl0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=RcgrKNFF; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="RcgrKNFF" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50OIJhvI019083; Fri, 24 Jan 2025 20:18:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=VMimhGbcbFXWBupAK SoNabpNX9uj544kn/Kj5Rx/cnQ=; b=RcgrKNFFanzSvJ9pI/0GzaRSCmYsjsyB6 +uC5avIuwCKCrTsj5mYex0iK4VLcuDeHDioPlJ96JB3+JXL6fYYGz0nsRops7oo/ 6DDqTIFP7Bjx3YEdburHK7Q931HABcHhW2yil9InsCv1vXXn1iABMMhs9caGjsxN KqSd/OSUIpu6/p/D9+U0dFf0dyss/ZvQw0yZPmAJzI44L8edhz0GCJKXh8g73SN9 RVYBdU8wbVlOuFo+OUgkWzR09XgK1Ks6De6oVvP0wiFaxRRgFSUUtfQdxGHX/3nN /Fwitp0fAp0x7Rwuw2MxDC/KBKIRGlhmWEJSqN0r4znD3QwVjjPyQ== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44c0x9606f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:36 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 50OJ0FxY029595; Fri, 24 Jan 2025 20:18:34 GMT Received: from smtprelay01.wdc07v.mail.ibm.com ([172.16.1.68]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 448qmnwa6u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:34 +0000 Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay01.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 50OKIXTx23527772 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2025 20:18:33 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2F54C5805A; Fri, 24 Jan 2025 20:18:33 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 398F05805E; Fri, 24 Jan 2025 20:18:32 +0000 (GMT) Received: from li-2311da4c-2e09-11b2-a85c-c003041e9174.ibm.com.com (unknown [9.61.77.196]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 24 Jan 2025 20:18:32 +0000 (GMT) From: Matthew Rosato To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com Cc: hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, svens@linux.ibm.com, borntraeger@linux.ibm.com, clegoate@redhat.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 4/6] iommu/s390: support iova_to_phys for additional table regions Date: Fri, 24 Jan 2025 15:18:24 -0500 Message-ID: <20250124201826.348848-5-mjrosato@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250124201826.348848-1-mjrosato@linux.ibm.com> References: <20250124201826.348848-1-mjrosato@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: zwKO13VZcV0F3zqWWr3ydc53vLg5sxB6 X-Proofpoint-ORIG-GUID: zwKO13VZcV0F3zqWWr3ydc53vLg5sxB6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-24_08,2025-01-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 phishscore=0 mlxlogscore=868 priorityscore=1501 impostorscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 mlxscore=0 suspectscore=0 spamscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2411120000 definitions=main-2501240137 Content-Type: text/plain; charset="utf-8" The origin_type of the dma_table is used to determine how many table levels must be traversed for the translation. Signed-off-by: Matthew Rosato --- arch/s390/include/asm/pci_dma.h | 2 ++ drivers/iommu/s390-iommu.c | 52 ++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/arch/s390/include/asm/pci_dma.h b/arch/s390/include/asm/pci_dm= a.h index 42d7cc4262ca..8d8962e4fd58 100644 --- a/arch/s390/include/asm/pci_dma.h +++ b/arch/s390/include/asm/pci_dma.h @@ -55,6 +55,8 @@ enum zpci_ioat_dtype { #define ZPCI_PT_BITS 8 #define ZPCI_ST_SHIFT (ZPCI_PT_BITS + PAGE_SHIFT) #define ZPCI_RT_SHIFT (ZPCI_ST_SHIFT + ZPCI_TABLE_BITS) +#define ZPCI_RS_SHIFT (ZPCI_RT_SHIFT + ZPCI_TABLE_BITS) +#define ZPCI_RF_SHIFT (ZPCI_RS_SHIFT + ZPCI_TABLE_BITS) =20 #define ZPCI_RTE_FLAG_MASK 0x3fffUL #define ZPCI_RTE_ADDR_MASK (~ZPCI_RTE_FLAG_MASK) diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c index 73e0bb251bc1..88adc4efc53f 100644 --- a/drivers/iommu/s390-iommu.c +++ b/drivers/iommu/s390-iommu.c @@ -36,6 +36,16 @@ struct s390_domain { =20 static struct iommu_domain blocking_domain; =20 +static inline unsigned int calc_rfx(dma_addr_t ptr) +{ + return ((unsigned long)ptr >> ZPCI_RF_SHIFT) & ZPCI_INDEX_MASK; +} + +static inline unsigned int calc_rsx(dma_addr_t ptr) +{ + return ((unsigned long)ptr >> ZPCI_RS_SHIFT) & ZPCI_INDEX_MASK; +} + static inline unsigned int calc_rtx(dma_addr_t ptr) { return ((unsigned long)ptr >> ZPCI_RT_SHIFT) & ZPCI_INDEX_MASK; @@ -704,6 +714,43 @@ static int s390_iommu_map_pages(struct iommu_domain *d= omain, return rc; } =20 +static unsigned long *get_rto_from_iova(struct s390_domain *domain, + dma_addr_t iova) +{ + unsigned long *rfo, *rso, *rto; + unsigned long rfe, rse; + unsigned int rfx, rsx; + + switch (domain->origin_type) { + case ZPCI_TABLE_TYPE_RFX: + rfo =3D domain->dma_table; + goto itp_rf; + case ZPCI_TABLE_TYPE_RSX: + rso =3D domain->dma_table; + goto itp_rs; + case ZPCI_TABLE_TYPE_RTX: + return domain->dma_table; + default: + return NULL; + } + +itp_rf: + rfx =3D calc_rfx(iova); + rfe =3D READ_ONCE(rfo[rfx]); + if (!reg_entry_isvalid(rfe)) + return NULL; + rso =3D get_rf_rso(rfe); + +itp_rs: + rsx =3D calc_rsx(iova); + rse =3D READ_ONCE(rso[rsx]); + if (!reg_entry_isvalid(rse)) + return NULL; + rto =3D get_rs_rto(rse); + + return rto; +} + static phys_addr_t s390_iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova) { @@ -717,10 +764,13 @@ static phys_addr_t s390_iommu_iova_to_phys(struct iom= mu_domain *domain, iova > domain->geometry.aperture_end) return 0; =20 + rto =3D get_rto_from_iova(s390_domain, iova); + if (!rto) + return 0; + rtx =3D calc_rtx(iova); sx =3D calc_sx(iova); px =3D calc_px(iova); - rto =3D s390_domain->dma_table; =20 rte =3D READ_ONCE(rto[rtx]); if (reg_entry_isvalid(rte)) { --=20 2.48.1 From nobody Sat May 9 09:08:50 2026 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BC3BA225793; Fri, 24 Jan 2025 20:18:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749931; cv=none; b=RvDvBIG8ddOj1K6omLerYzKWiIz3dXpi7GYaRWEbEJ4tzooc60R/c4avJRJ3UbtVBUWkfbi5L1UwK2skJe7I5Ek/s1oZovGOlx/f7SJILUkagvRMGByzpI6XGe8s7RoJyGMrFE2I6/gUhVt9XCyeHVmMpuqbC9xzSt5xIDGIYH0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749931; c=relaxed/simple; bh=spUQLLo/b0lIzu/+AIm/mnkNz0GvVqHrVQFtA+5jfnw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fO6f3eGxPj2lrtRmLzGs8GCGqD9Y350byB5oZeoKbJRFlW+J6p21oBi5vzM4lK2XCvJ1Uft+k4aDEbSYYmcx/zAWAPrG8un0V09yF1KPqEfzp+de8UUH3jxcvwWoY0YMIFw/8CPJZK+/Qs0L0rAEk7Kt1lFCUNeUQwyUA8piH1k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=WQGY+AWv; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="WQGY+AWv" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50OCxZS7014626; Fri, 24 Jan 2025 20:18:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=MSjV3J/DHiwx9kRTq HZzY4V9/1n16syH8C6WsDILufI=; b=WQGY+AWvd7h2VCvBmE0tlTXCc8Z/RMgnF ZOv/jX18/Ux5bU8ipNUhCfprbNTRFMHMmY72NjdG69N+sNP5yJgCrt7nk1dpYAKi nyzJQIyc5Ztx1LHIWxrShYg76EPlJ8xe+poQWvby9cWzfiStfc0gGI9Ipo/mwflG 6Ch148ei/Mlf9fm7s82hxW8Xxo8M3EKdJpHeVFLhLsHOOuFe9FEs6VjqBXwUEoiR dHeFOPAtMS8zLcum4q7Lhfvhw/HW7USlQlOTeysSWS+566cQH1xngFFtFCcsH7uV dlwRjP6Psp+5w+cH61e4b/OXSFGi88ir8WK0s4/amj7ehEV2rAWIA== Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44c4p7vp2u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:36 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 50OJoHaf022449; Fri, 24 Jan 2025 20:18:35 GMT Received: from smtprelay03.dal12v.mail.ibm.com ([172.16.1.5]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 448r4kn5n9-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:35 +0000 Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay03.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 50OKIY9T31851106 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2025 20:18:34 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3E8095805C; Fri, 24 Jan 2025 20:18:34 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 49A0B58051; Fri, 24 Jan 2025 20:18:33 +0000 (GMT) Received: from li-2311da4c-2e09-11b2-a85c-c003041e9174.ibm.com.com (unknown [9.61.77.196]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 24 Jan 2025 20:18:33 +0000 (GMT) From: Matthew Rosato To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com Cc: hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, svens@linux.ibm.com, borntraeger@linux.ibm.com, clegoate@redhat.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 5/6] iommu/s390: support map/unmap for additional table regions Date: Fri, 24 Jan 2025 15:18:25 -0500 Message-ID: <20250124201826.348848-6-mjrosato@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250124201826.348848-1-mjrosato@linux.ibm.com> References: <20250124201826.348848-1-mjrosato@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 1WObz9QmdeNU-vhA8X_i6aUUxlYLnNLa X-Proofpoint-ORIG-GUID: 1WObz9QmdeNU-vhA8X_i6aUUxlYLnNLa X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-24_08,2025-01-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 mlxscore=0 priorityscore=1501 adultscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 suspectscore=0 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2411120000 definitions=main-2501240137 Content-Type: text/plain; charset="utf-8" Map and unmap ops use the shared dma_walk_cpu_trans routine, update this using the origin_type of the dma_table to determine how many table levels must be walked. Signed-off-by: Matthew Rosato --- drivers/iommu/s390-iommu.c | 131 ++++++++++++++++++++++++++++++++++--- 1 file changed, 123 insertions(+), 8 deletions(-) diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c index 88adc4efc53f..4924fe9faccb 100644 --- a/drivers/iommu/s390-iommu.c +++ b/drivers/iommu/s390-iommu.c @@ -67,6 +67,20 @@ static inline void set_pt_pfaa(unsigned long *entry, phy= s_addr_t pfaa) *entry |=3D (pfaa & ZPCI_PTE_ADDR_MASK); } =20 +static inline void set_rf_rso(unsigned long *entry, phys_addr_t rso) +{ + *entry &=3D ZPCI_RTE_FLAG_MASK; + *entry |=3D (rso & ZPCI_RTE_ADDR_MASK); + *entry |=3D ZPCI_TABLE_TYPE_RFX; +} + +static inline void set_rs_rto(unsigned long *entry, phys_addr_t rto) +{ + *entry &=3D ZPCI_RTE_FLAG_MASK; + *entry |=3D (rto & ZPCI_RTE_ADDR_MASK); + *entry |=3D ZPCI_TABLE_TYPE_RSX; +} + static inline void set_rt_sto(unsigned long *entry, phys_addr_t sto) { *entry &=3D ZPCI_RTE_FLAG_MASK; @@ -81,6 +95,22 @@ static inline void set_st_pto(unsigned long *entry, phys= _addr_t pto) *entry |=3D ZPCI_TABLE_TYPE_SX; } =20 +static inline void validate_rf_entry(unsigned long *entry) +{ + *entry &=3D ~ZPCI_TABLE_VALID_MASK; + *entry &=3D ~ZPCI_TABLE_OFFSET_MASK; + *entry |=3D ZPCI_TABLE_VALID; + *entry |=3D ZPCI_TABLE_LEN_RFX; +} + +static inline void validate_rs_entry(unsigned long *entry) +{ + *entry &=3D ~ZPCI_TABLE_VALID_MASK; + *entry &=3D ~ZPCI_TABLE_OFFSET_MASK; + *entry |=3D ZPCI_TABLE_VALID; + *entry |=3D ZPCI_TABLE_LEN_RSX; +} + static inline void validate_rt_entry(unsigned long *entry) { *entry &=3D ~ZPCI_TABLE_VALID_MASK; @@ -286,6 +316,60 @@ static unsigned long *dma_alloc_page_table(gfp_t gfp) return table; } =20 +static unsigned long *dma_get_rs_table_origin(unsigned long *rfep, gfp_t g= fp) +{ + unsigned long old_rfe, rfe; + unsigned long *rso; + + rfe =3D READ_ONCE(*rfep); + if (reg_entry_isvalid(rfe)) { + rso =3D get_rf_rso(rfe); + } else { + rso =3D dma_alloc_cpu_table(gfp); + if (!rso) + return NULL; + + set_rf_rso(&rfe, virt_to_phys(rso)); + validate_rf_entry(&rfe); + entry_clr_protected(&rfe); + + old_rfe =3D cmpxchg(rfep, ZPCI_TABLE_INVALID, rfe); + if (old_rfe !=3D ZPCI_TABLE_INVALID) { + /* Somone else was faster, use theirs */ + dma_free_cpu_table(rso); + rso =3D get_rf_rso(old_rfe); + } + } + return rso; +} + +static unsigned long *dma_get_rt_table_origin(unsigned long *rsep, gfp_t g= fp) +{ + unsigned long old_rse, rse; + unsigned long *rto; + + rse =3D READ_ONCE(*rsep); + if (reg_entry_isvalid(rse)) { + rto =3D get_rs_rto(rse); + } else { + rto =3D dma_alloc_cpu_table(gfp); + if (!rto) + return NULL; + + set_rs_rto(&rse, virt_to_phys(rto)); + validate_rs_entry(&rse); + entry_clr_protected(&rse); + + old_rse =3D cmpxchg(rsep, ZPCI_TABLE_INVALID, rse); + if (old_rse !=3D ZPCI_TABLE_INVALID) { + /* Somone else was faster, use theirs */ + dma_free_cpu_table(rto); + rto =3D get_rs_rto(old_rse); + } + } + return rto; +} + static unsigned long *dma_get_seg_table_origin(unsigned long *rtep, gfp_t = gfp) { unsigned long old_rte, rte; @@ -339,11 +423,45 @@ static unsigned long *dma_get_page_table_origin(unsig= ned long *step, gfp_t gfp) return pto; } =20 -static unsigned long *dma_walk_cpu_trans(unsigned long *rto, dma_addr_t dm= a_addr, gfp_t gfp) +static unsigned long *dma_walk_region_tables(struct s390_domain *domain, + dma_addr_t dma_addr, gfp_t gfp) +{ + unsigned long *rfo, *rso; + unsigned int rfx, rsx; + + switch (domain->origin_type) { + case ZPCI_TABLE_TYPE_RFX: + rfo =3D domain->dma_table; + goto walk_rf; + case ZPCI_TABLE_TYPE_RSX: + rso =3D domain->dma_table; + goto walk_rs; + case ZPCI_TABLE_TYPE_RTX: + return domain->dma_table; + default: + return NULL; + } + +walk_rf: + rfx =3D calc_rfx(dma_addr); + rso =3D dma_get_rs_table_origin(&rfo[rfx], gfp); + if (!rso) + return NULL; +walk_rs: + rsx =3D calc_rsx(dma_addr); + return dma_get_rt_table_origin(&rso[rsx], gfp); +} + +static unsigned long *dma_walk_cpu_trans(struct s390_domain *domain, + dma_addr_t dma_addr, gfp_t gfp) { - unsigned long *sto, *pto; + unsigned long *rto, *sto, *pto; unsigned int rtx, sx, px; =20 + rto =3D dma_walk_region_tables(domain, dma_addr, gfp); + if (!rto) + return NULL; + rtx =3D calc_rtx(dma_addr); sto =3D dma_get_seg_table_origin(&rto[rtx], gfp); if (!sto) @@ -635,8 +753,7 @@ static int s390_iommu_validate_trans(struct s390_domain= *s390_domain, int rc; =20 for (i =3D 0; i < nr_pages; i++) { - entry =3D dma_walk_cpu_trans(s390_domain->dma_table, dma_addr, - gfp); + entry =3D dma_walk_cpu_trans(s390_domain, dma_addr, gfp); if (unlikely(!entry)) { rc =3D -ENOMEM; goto undo_cpu_trans; @@ -651,8 +768,7 @@ static int s390_iommu_validate_trans(struct s390_domain= *s390_domain, undo_cpu_trans: while (i-- > 0) { dma_addr -=3D PAGE_SIZE; - entry =3D dma_walk_cpu_trans(s390_domain->dma_table, - dma_addr, gfp); + entry =3D dma_walk_cpu_trans(s390_domain, dma_addr, gfp); if (!entry) break; dma_update_cpu_trans(entry, 0, ZPCI_PTE_INVALID); @@ -669,8 +785,7 @@ static int s390_iommu_invalidate_trans(struct s390_doma= in *s390_domain, int rc =3D 0; =20 for (i =3D 0; i < nr_pages; i++) { - entry =3D dma_walk_cpu_trans(s390_domain->dma_table, dma_addr, - GFP_ATOMIC); + entry =3D dma_walk_cpu_trans(s390_domain, dma_addr, GFP_ATOMIC); if (unlikely(!entry)) { rc =3D -EINVAL; break; --=20 2.48.1 From nobody Sat May 9 09:08:50 2026 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 782C5225762; Fri, 24 Jan 2025 20:18:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749930; cv=none; b=MrGVzzMC/YhL5nfX35n6O8RY5655AUI54c8fCltYaUQbi1LCJ6da5BoJ3dvtM7nllgE/FXPl0AGmAf8DqLaJlXh326s7FcAdia/OIYVjMZyivMSwQMgaK5ANZj7MbFMS16DDkvoULUpxKORu/sbhcoWajOIwy2bu7b+quKJRepQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737749930; c=relaxed/simple; bh=pT/7AlUe4dxL5NJ2hEzis+4o3CayyTif7T1u0mz3kBg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=k4S598EE1tpCdupj2as8TbPbQEjnMUVIWMeaF3rikrYOVIvF4qDgTnNLW3y6dI3LDBTRN/qhntssnQLLWtJWL5Uu6IqgYkThccYoU74RsbAmVU+8jycBO4CS1f3u9t0TKeUR/KZXVhGBP+gPo1JKKBhrg/aHLWnG90LjLu8xo5E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=JQyHNcjz; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="JQyHNcjz" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 50OJ9fYA009864; Fri, 24 Jan 2025 20:18:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=NRQwuH3A30mPpJet1 sQ0Rz415sNQ5MtBJWGnboZyE5E=; b=JQyHNcjzqGJJDVEMU5CXHU2NN7qRygMuB 7eO5wW1+bp/w+XVmr53rzkSkeDNS3ZvHOVpVKiS5UpXySiHpZSiNFHBkmqI9ACdI yRXeK9+6TLXdomAZqb5rkLgIA/XE7jgs7W/7qjfZKeLvQlczojGZLNz+76w3Vxwf Bshte0JK0uHl7VPjfsTJQ5fwpjvBSsAjlCQFZH8H3ZddF/v7L5u/t3szqcXe+17s naGWCrIjvPYWoOUL2AeWhE4BtuD8TriACPYBLZcw8FgdP9f16zII9pUcUfW1cb0k iUeRbSveYHiGuhqL/5rYYANOj8QOCcv3E0VG7uNLYe681cuFymklA== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44c1pywmxy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:37 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 50OJ2EOo019266; Fri, 24 Jan 2025 20:18:37 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 448pmswf09-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 24 Jan 2025 20:18:37 +0000 Received: from smtpav02.dal12v.mail.ibm.com (smtpav02.dal12v.mail.ibm.com [10.241.53.101]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 50OKIZ8424445472 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 24 Jan 2025 20:18:35 GMT Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 4F7905805C; Fri, 24 Jan 2025 20:18:35 +0000 (GMT) Received: from smtpav02.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5A87C58051; Fri, 24 Jan 2025 20:18:34 +0000 (GMT) Received: from li-2311da4c-2e09-11b2-a85c-c003041e9174.ibm.com.com (unknown [9.61.77.196]) by smtpav02.dal12v.mail.ibm.com (Postfix) with ESMTP; Fri, 24 Jan 2025 20:18:34 +0000 (GMT) From: Matthew Rosato To: joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, gerald.schaefer@linux.ibm.com, schnelle@linux.ibm.com Cc: hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, svens@linux.ibm.com, borntraeger@linux.ibm.com, clegoate@redhat.com, iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org Subject: [PATCH v2 6/6] iommu/s390: allow larger region tables Date: Fri, 24 Jan 2025 15:18:26 -0500 Message-ID: <20250124201826.348848-7-mjrosato@linux.ibm.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250124201826.348848-1-mjrosato@linux.ibm.com> References: <20250124201826.348848-1-mjrosato@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: guMNenpfqk7rKSVBiELxTDOHhYHcwjgn X-Proofpoint-GUID: guMNenpfqk7rKSVBiELxTDOHhYHcwjgn X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-01-24_08,2025-01-23_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 mlxlogscore=886 bulkscore=0 lowpriorityscore=0 spamscore=0 mlxscore=0 priorityscore=1501 adultscore=0 impostorscore=0 malwarescore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2411120000 definitions=main-2501240137 Content-Type: text/plain; charset="utf-8" Extend the aperture calculation to consider sizes beyond the maximum size of a region third table. Attempt to always use the smallest table size possible to avoid unnecessary extra steps during translation. Signed-off-by: Matthew Rosato --- arch/s390/include/asm/pci_dma.h | 1 + drivers/iommu/s390-iommu.c | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/arch/s390/include/asm/pci_dma.h b/arch/s390/include/asm/pci_dm= a.h index 8d8962e4fd58..d12e17201661 100644 --- a/arch/s390/include/asm/pci_dma.h +++ b/arch/s390/include/asm/pci_dma.h @@ -25,6 +25,7 @@ enum zpci_ioat_dtype { #define ZPCI_KEY (PAGE_DEFAULT_KEY << 5) =20 #define ZPCI_TABLE_SIZE_RT (1UL << 42) +#define ZPCI_TABLE_SIZE_RS (1UL << 53) =20 #define ZPCI_IOTA_STO_FLAG (ZPCI_IOTA_IOT_ENABLED | ZPCI_KEY | ZPCI_IOTA_D= T_ST) #define ZPCI_IOTA_RTTO_FLAG (ZPCI_IOTA_IOT_ENABLED | ZPCI_KEY | ZPCI_IOTA_= DT_RT) diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c index 4924fe9faccb..c6b2bca881c3 100644 --- a/drivers/iommu/s390-iommu.c +++ b/drivers/iommu/s390-iommu.c @@ -953,12 +953,24 @@ int zpci_init_iommu(struct zpci_dev *zdev) goto out_sysfs; =20 zdev->start_dma =3D PAGE_ALIGN(zdev->start_dma); - aperture_size =3D min3(s390_iommu_aperture, - ZPCI_TABLE_SIZE_RT - zdev->start_dma, - zdev->end_dma - zdev->start_dma + 1); + aperture_size =3D min(s390_iommu_aperture, + zdev->end_dma - zdev->start_dma + 1); + if (aperture_size <=3D (ZPCI_TABLE_SIZE_RT - zdev->start_dma)) { + zdev->origin_type =3D ZPCI_TABLE_TYPE_RTX; + zdev->max_table_size =3D ZPCI_TABLE_SIZE_RT - 1; + } else if (aperture_size <=3D (ZPCI_TABLE_SIZE_RS - zdev->start_dma) && + (zdev->dtsm & ZPCI_IOTA_DT_RS)) { + zdev->origin_type =3D ZPCI_TABLE_TYPE_RSX; + zdev->max_table_size =3D ZPCI_TABLE_SIZE_RS - 1; + } else if (zdev->dtsm & ZPCI_IOTA_DT_RF) { + zdev->origin_type =3D ZPCI_TABLE_TYPE_RFX; + zdev->max_table_size =3D U64_MAX; + } else { + /* Assume RTX available */ + zdev->origin_type =3D ZPCI_TABLE_TYPE_RTX; + zdev->max_table_size =3D ZPCI_TABLE_SIZE_RT - 1; + } zdev->end_dma =3D zdev->start_dma + aperture_size - 1; - zdev->origin_type =3D ZPCI_TABLE_TYPE_RTX; - zdev->max_table_size =3D ZPCI_TABLE_SIZE_RT - 1; =20 return 0; =20 --=20 2.48.1