Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2218913/?format=api
{ "id": 2218913, "url": "http://patchwork.ozlabs.org/api/patches/2218913/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260402022921.298818-2-kshk@linux.ibm.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260402022921.298818-2-kshk@linux.ibm.com>", "list_archive_url": null, "date": "2026-04-02T02:29:07", "name": "[01/15] s390x/pci: implement IOMMU replay", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "6ca16d13812fc7b6c232aab86a77323dce7558b5", "submitter": { "id": 90249, "url": "http://patchwork.ozlabs.org/api/people/90249/?format=api", "name": "Konstantin Shkolnyy", "email": "kshk@linux.ibm.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260402022921.298818-2-kshk@linux.ibm.com/mbox/", "series": [ { "id": 498419, "url": "http://patchwork.ozlabs.org/api/series/498419/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=498419", "date": "2026-04-02T02:29:08", "name": "s390x/pci: Implement migration for emulated devices", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498419/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2218913/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218913/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256\n header.s=pp1 header.b=kNnF/CDQ;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmRHZ5J06z1yFv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 02 Apr 2026 13:53:13 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1w88AY-0001MC-04; Wed, 01 Apr 2026 22:52:31 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <kshk@linux.ibm.com>)\n id 1w88AO-0001Kl-O0; Wed, 01 Apr 2026 22:52:22 -0400", "from mx0a-001b2d01.pphosted.com ([148.163.156.1])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <kshk@linux.ibm.com>)\n id 1w88AM-0007jI-CS; Wed, 01 Apr 2026 22:52:20 -0400", "from pps.filterd (m0360083.ppops.net [127.0.0.1])\n by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 631Nb3Tb445673; Thu, 2 Apr 2026 02:52:13 GMT", "from ppma12.dal12v.mail.ibm.com\n (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220])\n by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4d66g233ca-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Thu, 02 Apr 2026 02:52:13 +0000 (GMT)", "from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1])\n by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id\n 631Mjbeb021665;\n Thu, 2 Apr 2026 02:52:12 GMT", "from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9])\n by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4d6sasrj6n-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT);\n Thu, 02 Apr 2026 02:52:12 +0000", "from smtpav06.wdc07v.mail.ibm.com (smtpav06.wdc07v.mail.ibm.com\n [10.39.53.233])\n by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n 6322qB1R31326766\n (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Thu, 2 Apr 2026 02:52:11 GMT", "from smtpav06.wdc07v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id 699C1580F5;\n Thu, 2 Apr 2026 02:29:52 +0000 (GMT)", "from smtpav06.wdc07v.mail.ibm.com (unknown [127.0.0.1])\n by IMSVA (Postfix) with ESMTP id DF90A580F0;\n Thu, 2 Apr 2026 02:29:51 +0000 (GMT)", "from WIN-DU0DFC9G5VV.ibm.com (unknown [9.61.247.119])\n by smtpav06.wdc07v.mail.ibm.com (Postfix) with ESMTP;\n Thu, 2 Apr 2026 02:29:51 +0000 (GMT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc\n :content-transfer-encoding:date:from:in-reply-to:message-id\n :mime-version:references:subject:to; s=pp1; bh=UXYpNRzv4+eZcjhxh\n 3B2xqMU0eQ8GnuF6qMEze3ITME=; b=kNnF/CDQhWsBk88rTQQ1icqsD2thW+QVn\n zE9kpxB6ntHAGRO0CEn5TaRq38Yzs0U/Sv4AJAEWDULeZDHYj7dABZxuWaFZYGnG\n jA4Pq0wGUCgW4zNSFripJfNWxN9IwOCNgrzCYlGYdDtQ3Rnx8PEjIBtlAA0+BdYL\n HTHnYCmreQUZmmifv6iQEgCfFZw2hQBPAYnFdADBZmpm1Aw2ax1g8VsR7PLLkaIi\n v4jzazpbxr8g/AzeEWeeTORdqBoAAQzoTxcudZJ1rypzBSAu8OgBR+N7dOyGSIav\n Gh1FvkmE+nfewzOHLyy4zKEKezCaBtHreIP2C9pjEVHLAIHfiJ+8w==", "From": "Konstantin Shkolnyy <kshk@linux.ibm.com>", "To": "mjrosato@linux.ibm.com", "Cc": "alifm@linux.ibm.com, richard.henderson@linaro.org, iii@linux.ibm.com,\n david@kernel.org, cohuck@redhat.com, pasic@linux.ibm.com,\n borntraeger@linux.ibm.com, qemu-s390x@nongnu.org, qemu-devel@nongnu.org", "Subject": "[PATCH 01/15] s390x/pci: implement IOMMU replay", "Date": "Wed, 1 Apr 2026 21:29:07 -0500", "Message-Id": "<20260402022921.298818-2-kshk@linux.ibm.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20260402022921.298818-1-kshk@linux.ibm.com>", "References": "<20260402022921.298818-1-kshk@linux.ibm.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-TM-AS-GCONF": "00", "X-Authority-Analysis": "v=2.4 cv=Fdo6BZ+6 c=1 sm=1 tr=0 ts=69cdd9dd cx=c_pps\n a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17\n a=A5OVakUREuEA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22\n a=iQ6ETzBq9ecOQQE5vZCe:22 a=VnNF1IyMAAAA:8 a=CCwrLMjO1E3osjVnD3IA:9", "X-Proofpoint-ORIG-GUID": "UJTxQi_7XAXOMLUSnZVqkNUguQfEPsFC", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDAyMDAyNCBTYWx0ZWRfX+09Eo32RIH7z\n gG/UeeZ/6DusMx6vHNO4BeNrJo+S+2umLra/SOe3wDIE58kml+8wEkrkMQvx+4FYtpTyMvHtbjw\n YWbmFBXnSUNSxilR3dwPJ30+GU+FM1jgD/ATC8kmccofXsxCZYuUbqCaaEBLto8gh3n5AL8FeaA\n eMKMQJVOAR9Bu3+h5VxMFEYYiNk8HaI0DhtLsrh7jUvtEx/mLdIn99qEO7ac4gm48mEN28sYyEW\n 0AhDI8ubkP+TGeTG7xes0PS9M23oJK7LurJ14t8o2lZb6P9Po7X859RfGfxCQTwasZl2VFw3WPH\n 24Mf9m+0K7CeAxaYH9MmiykzOR0DZF87AAWSbTT0irzuYAnN9KxNWnowzbR6aULcpty2L8e2WN7\n DJxjqZ/Y6m2NDSVrHokHi/C5YIg71bSaci+/gXLJQi8OYxpaA1z9KrUZsrI5ad1towaxwgUj63A\n v0+pYZbEjNwcxNcOvwQ==", "X-Proofpoint-GUID": "UJTxQi_7XAXOMLUSnZVqkNUguQfEPsFC", "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-01_05,2026-04-01_02,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n impostorscore=0 clxscore=1015 bulkscore=0 suspectscore=0 priorityscore=1501\n adultscore=0 malwarescore=0 phishscore=0 spamscore=0 lowpriorityscore=0\n classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0\n reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2604020024", "Received-SPF": "pass client-ip=148.163.156.1; envelope-from=kshk@linux.ibm.com;\n helo=mx0a-001b2d01.pphosted.com", "X-Spam_score_int": "-6", "X-Spam_score": "-0.7", "X-Spam_bar": "/", "X-Spam_report": "(-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7,\n RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=1, RCVD_IN_VALIDITY_RPBL_BLOCKED=1,\n SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "From: Matthew Rosato <mjrosato@linux.ibm.com>\n\nThere are a few scenarios where IOMMU replay can potentially be needed\nfor zPCI device, namely VFIO device reset scenarios where the guest\ncontinues running and expects the contents of its IOMMU to be replayed\nupon IOAT re-registration and migration scenarios where the destination\nmust reconstruct the IOMMU on the destination.\n\nzPCI migration is not supported yet, but the IOMMU replay function is\nimplemented so that it can be called both from IOMMUMemoryRegionClass\nnow and migration post_load later.\n\nSigned-off-by: Matthew Rosato <mjrosato@linux.ibm.com>\n---\n hw/s390x/s390-pci-bus.c | 50 ++++++++++++++++++++++++++++----\n hw/s390x/s390-pci-inst.c | 4 +--\n include/hw/s390x/s390-pci-inst.h | 1 +\n 3 files changed, 47 insertions(+), 8 deletions(-)", "diff": "diff --git a/hw/s390x/s390-pci-bus.c b/hw/s390x/s390-pci-bus.c\nindex 4de7b587e8..3665aba106 100644\n--- a/hw/s390x/s390-pci-bus.c\n+++ b/hw/s390x/s390-pci-bus.c\n@@ -592,14 +592,52 @@ err:\n return ret;\n }\n \n-static void s390_pci_iommu_replay(IOMMUMemoryRegion *iommu,\n+static void s390_pci_ioat_replay(S390PCIIOMMU *iommu)\n+{\n+ S390IOTLBEntry entry;\n+ uint16_t error = 0;\n+ uint32_t dma_avail;\n+ hwaddr curr, end;\n+\n+ curr = iommu->pba;\n+ end = iommu->pal;\n+\n+ if (iommu->dm_mr) {\n+ /* If direct mapping is used, there are no guest tables to replay */\n+ return;\n+ }\n+\n+ if (iommu->dma_limit) {\n+ dma_avail = iommu->dma_limit->avail;\n+ } else {\n+ dma_avail = 1;\n+ }\n+\n+ while (curr < end) {\n+ error = s390_guest_io_table_walk(iommu->g_iota, curr, &entry);\n+ if (error) {\n+ error_report(\"Failure to walk table during iommu remap\");\n+ return;\n+ }\n+\n+ if (entry.perm != IOMMU_NONE) {\n+ if (dma_avail > 0) {\n+ dma_avail = s390_pci_update_iotlb(iommu, &entry);\n+ } else {\n+ error_report(\"DMA mappings exhausted: iommu remap failed\");\n+ return;\n+ }\n+ }\n+ curr += entry.len;\n+ }\n+}\n+\n+static void s390_pci_iommu_replay(IOMMUMemoryRegion *mr,\n IOMMUNotifier *notifier)\n {\n- /* It's impossible to plug a pci device on s390x that already has iommu\n- * mappings which need to be replayed, that is due to the \"one iommu per\n- * zpci device\" construct. But when we support migration of vfio-pci\n- * devices in future, we need to revisit this.\n- */\n+ S390PCIIOMMU *iommu = container_of(mr, S390PCIIOMMU, iommu_mr);\n+\n+ s390_pci_ioat_replay(iommu);\n }\n \n static S390PCIIOMMU *s390_pci_get_iommu(S390pciState *s, PCIBus *bus,\ndiff --git a/hw/s390x/s390-pci-inst.c b/hw/s390x/s390-pci-inst.c\nindex 10066ca618..1834596076 100644\n--- a/hw/s390x/s390-pci-inst.c\n+++ b/hw/s390x/s390-pci-inst.c\n@@ -613,8 +613,8 @@ int pcistg_service_call(S390CPU *cpu, uint8_t r1, uint8_t r2, uintptr_t ra)\n return 0;\n }\n \n-static uint32_t s390_pci_update_iotlb(S390PCIIOMMU *iommu,\n- S390IOTLBEntry *entry)\n+uint32_t s390_pci_update_iotlb(S390PCIIOMMU *iommu,\n+ S390IOTLBEntry *entry)\n {\n S390IOTLBEntry *cache = g_hash_table_lookup(iommu->iotlb, &entry->iova);\n IOMMUTLBEvent event = {\ndiff --git a/include/hw/s390x/s390-pci-inst.h b/include/hw/s390x/s390-pci-inst.h\nindex 5cb8da540b..c782990e3b 100644\n--- a/include/hw/s390x/s390-pci-inst.h\n+++ b/include/hw/s390x/s390-pci-inst.h\n@@ -111,6 +111,7 @@ int mpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,\n int stpcifc_service_call(S390CPU *cpu, uint8_t r1, uint64_t fiba, uint8_t ar,\n uintptr_t ra);\n void fmb_timer_free(S390PCIBusDevice *pbdev);\n+uint32_t s390_pci_update_iotlb(S390PCIIOMMU *iommu, S390IOTLBEntry *entry);\n \n #define ZPCI_IO_BAR_MIN 0\n #define ZPCI_IO_BAR_MAX 5\n", "prefixes": [ "01/15" ] }