From nobody Wed Sep 10 05:59:24 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1757350637; cv=none; d=zohomail.com; s=zohoarc; b=ZlTC+cx3gQkuuVuSx8xxwOuhuUkfX7RmgZBYvqgYffMSX0RYxlRYl57oVcSQW25W/wlZUnE1gw3KsY7pNbxOdSmfgPEOfUKuLJkRAZcorBeMXPixDa5r3+SUbUFodecKDGcoU2RxzG1zd1pRqLA5uhYMSf98L80At/7U2taaYzM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1757350637; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Yy0UHB5UY3SkW0YZ23dbCFp+M/mYAit6r4Hadl6Hdj8=; b=S69p2yUnD38NJxBYvKT55EFVlfQpNM3OdqrVfmaeOxhj1CG9gOnbQHWuKfyiJ8+4bgeBZLtKqor8OfZT3p6dshzeGsQjD0MZ1Z4s0fMO48FXrRGhQQNQRZ+g020UmHU/mdU+rt/pgpouMkV9sqRc11aVUzfy4xiA1IH1/TCneac= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1757350637573805.7509900464352; Mon, 8 Sep 2025 09:57:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uvf8m-0006qp-AT; Mon, 08 Sep 2025 12:54:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uvf8Y-0006e9-2A for qemu-devel@nongnu.org; Mon, 08 Sep 2025 12:54:38 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uvf8N-0001ag-Q7 for qemu-devel@nongnu.org; Mon, 08 Sep 2025 12:54:37 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-367-z690hmoZPVWCDC8iA0nOFQ-1; Mon, 08 Sep 2025 12:54:24 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6D9BD1800365; Mon, 8 Sep 2025 16:54:23 +0000 (UTC) Received: from corto.redhat.com (unknown [10.44.32.50]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CBC99300018D; Mon, 8 Sep 2025 16:54:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1757350465; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Yy0UHB5UY3SkW0YZ23dbCFp+M/mYAit6r4Hadl6Hdj8=; b=KtWwaAmPqhwUzm5YWH/lL3fJrBjRvdEObq2GXyeSXupvrJNHd1+t1sNCOh3te1ptZW1reY hUwsGp39zEYnPIByairwAFguw/cBHaMVt8kZpPAff9KkBKgVSvEeBwmMFCnqvDC6Iyb/rz +STWuMMzzHkuL/I4ZV0h2zDyhkmhCzU= X-MC-Unique: z690hmoZPVWCDC8iA0nOFQ-1 X-Mimecast-MFC-AGG-ID: z690hmoZPVWCDC8iA0nOFQ_1757350463 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= To: qemu-devel@nongnu.org Cc: Alex Williamson , =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= , Yi Liu Subject: [PULL 08/31] vfio: Report an error when the 'dma_max_mappings' limit is reached Date: Mon, 8 Sep 2025 18:53:31 +0200 Message-ID: <20250908165354.1731444-9-clg@redhat.com> In-Reply-To: <20250908165354.1731444-1-clg@redhat.com> References: <20250908165354.1731444-1-clg@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=clg@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1757350640273124101 The VFIO IOMMU Type1 kernel driver enforces a default IOMMU mapping limit of 65535, which is configurable via the 'dma_max_mappings' module parameter. When this limit is reached, QEMU issues a warning and fails the mapping operation, but allows the VM to continue running, potentially causing issues later. This scenario occurs with SEV-SNP guests, which must update all IOMMU mappings during initialization. To address this, update vfio_ram_discard_register_listener() to accept an 'Error **' parameter and propagate the error to the caller. This change will halt the VM immediately, at init time, with the same error message. Additionally, the same behavior will be enforced at runtime. While this might be considered too brutal, the rarity of this case and the planned removal of the dma_max_mappings module parameter make it a reasonable approach. Cc: Alex Williamson Reviewed-by: Yi Liu Reviewed-by: Alex Williamson Link: https://lore.kernel.org/qemu-devel/20250814153419.1643897-1-clg@redha= t.com Signed-off-by: C=C3=A9dric Le Goater --- hw/vfio/listener.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 5ebafaa07ea15070dfbe299d3f2c0f265959fb7d..c244be5e218ae60e2b9c8a29d2d= 4b9dad86fc77a 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -250,8 +250,9 @@ static int vfio_ram_discard_notify_populate(RamDiscardL= istener *rdl, return 0; } =20 -static void vfio_ram_discard_register_listener(VFIOContainerBase *bcontain= er, - MemoryRegionSection *sectio= n) +static bool vfio_ram_discard_register_listener(VFIOContainerBase *bcontain= er, + MemoryRegionSection *sectio= n, + Error **errp) { RamDiscardManager *rdm =3D memory_region_get_ram_discard_manager(secti= on->mr); int target_page_size =3D qemu_target_page_size(); @@ -316,13 +317,15 @@ static void vfio_ram_discard_register_listener(VFIOCo= ntainerBase *bcontainer, =20 if (vrdl_mappings + max_memslots - vrdl_count > bcontainer->dma_max_mappings) { - warn_report("%s: possibly running out of DMA mappings. E.g., t= ry" + error_setg(errp, "%s: possibly running out of DMA mappings. E.= g., try" " increasing the 'block-size' of virtio-mem devies= ." " Maximum possible DMA mappings: %d, Maximum possi= ble" " memslots: %d", __func__, bcontainer->dma_max_map= pings, max_memslots); + return false; } } + return true; } =20 static void vfio_ram_discard_unregister_listener(VFIOContainerBase *bconta= iner, @@ -571,7 +574,9 @@ void vfio_container_region_add(VFIOContainerBase *bcont= ainer, */ if (memory_region_has_ram_discard_manager(section->mr)) { if (!cpr_remap) { - vfio_ram_discard_register_listener(bcontainer, section); + if (!vfio_ram_discard_register_listener(bcontainer, section, &= err)) { + goto fail; + } } else if (!vfio_cpr_ram_discard_register_listener(bcontainer, section)) { error_setg(&err, --=20 2.51.0