From nobody Mon Feb 9 01:48:20 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1763956946; cv=none; d=zohomail.com; s=zohoarc; b=g4EIFTGcmLHI+Y356ZgbqRRgw7EaXWCHX/q9twqGYqlaa4ttQwPI5XSPgMXWxEzUs41Xxx84FNa66h1gW/mFBYzw9TqBBjGJ6WH0PZ4ni5LTURHpXniAv+YF/dCzkpLoWupPXpvPdDDRQCrHVgPrahGwBtzKAqhYLfvQiv2IK2s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1763956946; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=5Ag186/Duxi1QrTx73gaJvoeNSOx3x+Fko0RiH98G3o=; b=TFP6VwtMKP7WH2BojjvySvKMcytNmo2cz/F23iasbA6X8Lf6BUV61hs0mX0TxNYKYlAEVz9gQQPpGuFw3GGa6Dx984l0vx3E4ubZTNrAdvGVU5/IiPCfsNYfD7x4tqlGhXJpqI/CGyrObuHVE+fMzRwAJ8CRp7LMSJjyhzDkir8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1763956946845164.2799894167007; Sun, 23 Nov 2025 20:02:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vNNmD-0008FO-Nh; Sun, 23 Nov 2025 23:02:09 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vNNmB-0008Dp-Kw for qemu-devel@nongnu.org; Sun, 23 Nov 2025 23:02:07 -0500 Received: from mail-wm1-x341.google.com ([2a00:1450:4864:20::341]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vNNmA-0003JO-0p for qemu-devel@nongnu.org; Sun, 23 Nov 2025 23:02:07 -0500 Received: by mail-wm1-x341.google.com with SMTP id 5b1f17b1804b1-477b1cc8fb4so21542165e9.1 for ; Sun, 23 Nov 2025 20:02:05 -0800 (PST) Received: from localhost.localdomain (88-187-86-199.subs.proxad.net. [88.187.86.199]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42cb7fa3a76sm25980802f8f.24.2025.11.23.20.02.02 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 23 Nov 2025 20:02:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1763956924; x=1764561724; darn=nongnu.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=5Ag186/Duxi1QrTx73gaJvoeNSOx3x+Fko0RiH98G3o=; b=kwrFBX4mrv/4r0F62njc+T0nyEskJBDKKhTPH6A6YEUF4jRqab2/5Iz4FR2fItHbGs iKUqHFy9qosC2I+p1voxrbcDLhDMyvC88Zn7SLpCqkLDc5Vr1YVVaHFqbSqBNljuPGRO sDX6XwSc98SGQuIo+WMJ469+9/X5dOmu0JDCelL2wgeagQW2wrNwI8gfkZh3hnCbN3bJ IIG+UbNZcwQlp5Y9U0GYJ9YzynzgpBozI5v0rNZkHaJ3r1orqf546M3le7yigVNg4bZ2 kogK0Rme9SoJgKmsUD6F3hUwn0rhklGx3Z+MlFmxvSZERepXSDVYd+epG0vndIV81Ke+ T9vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763956924; x=1764561724; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=5Ag186/Duxi1QrTx73gaJvoeNSOx3x+Fko0RiH98G3o=; b=b7dVXP8V03FOcE2viYKDme2XLjsHXYu97TiL/0bnNnpfAfIcy1HXZfW/CQhyTGODDT FFIQ3eNQXrAZRLQSu2S+cuTAtFyMR+EtRi4AhHAKFCaIZ7OGk+mdRd+cc69VqqEO+c0l /V7KEL2wLlbj6MgJVAb2gwFOLctudRET8cwIJL8Yt/aHTTR5m7VegfN5a8wvpkgQAEgA VkjRTxUgApPKQX6yYZg4kHc2dJRv63yPQry3CieSLufVmO9dNhKLpixQl3nwimX5NYhK e0Ucee9hrMbXLiukyiZHOFKPoZ0NcAp7S4MRZwx5Idx1fqjk3Sov8iKnliwQhbZfbi+W re+g== X-Gm-Message-State: AOJu0Yz4Myw2nITl/j40+ibQ4XzDBZTWEDXBp6QKexMM5MfFEMni/E/i ChpSqBQy4jZxVEz+tZxHjkaHBmF6n2269BY/7rFLK44L5qav6Q1VAqAFB4JjokVIcqpoBZv0WpZ hnIoqw/UAWorm X-Gm-Gg: ASbGncsQUWEQ3PB1bASPP9tukQhogQL4p4HCBhkN1ATXwPzh+UpQfchAZbgc7Wj1dso Y2AoWPVWZ1dACEcUHKjhwn0EXas2nN/WAOPwm0JiESY3qJKKnJhrd88rFn4Vh1Gv9mIMuBXDxhP IR7PYtT4hGPyHWM8y9aLB/Sa2yLtGl7RWVQR+jkvGqhOaeqVVuCN2C8DQD4LbgB49FbLdwJMMez NVO52MdLGDLqFMaE4eG2zi7NGEVGSBaeVxFb5y4+nj4kLP2uil19J7EDms6BJzorIX1HVDxVoql qWr6NrREIpED/ROcd3zwiEUieEghkmHfrCQY2jJ9Yz7qEP0eUVb8UVU0JcGvMmoV52RRWzVrbd3 adsmA9iqOz3ouCqAXBRBMSA/aA52fWxRshtRD4EWo0vgiJMdcphJaHMiKEDBCm4EPgEXlMV9Ezn P7n9I7e4UOYKHwTWq2ZwCuG5l6VZMz5xVK7VX43R1nZknzBNkrzky9iGCM1pgo X-Google-Smtp-Source: AGHT+IHgz72xQNjtbc49aan4nHlti6RW96v4rpjYW8uSq5Iirr7v/CyXqEjK1ayP3dZK9t1L92OhoA== X-Received: by 2002:a05:6000:40e0:b0:429:b525:6dc2 with SMTP id ffacd0b85a97d-42cc1cbb56cmr9899811f8f.17.1763956924031; Sun, 23 Nov 2025 20:02:04 -0800 (PST) From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Fabiano Rosas , qemu-block@nongnu.org, Klaus Jensen , Gustavo Romero , Paolo Bonzini , Keith Busch , Jesper Devantier , Laurent Vivier , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH-for-10.2] hw/nvme/ctrl: Validate PMR memory size Date: Mon, 24 Nov 2025 05:02:01 +0100 Message-ID: <20251124040201.55117-1-philmd@linaro.org> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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=2a00:1450:4864:20::341; envelope-from=philmd@linaro.org; helo=mail-wm1-x341.google.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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1763956948208019200 Per the PCI spec 3.0, in section 6.2.5.1, "Address Maps": A 32-bit register can be implemented to support a single memory size that is a power of 2 from 16 bytes to 2 GB. Add a check in nvme_init_pmr(), returning an error if the PMR region size is too small; and update the QTest. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Klaus Jensen --- hw/nvme/ctrl.c | 13 +++++++++++-- tests/qtest/nvme-test.c | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c index 4d150c7206a..1df5e88dbbb 100644 --- a/hw/nvme/ctrl.c +++ b/hw/nvme/ctrl.c @@ -8819,10 +8819,15 @@ static void nvme_init_cmb(NvmeCtrl *n, PCIDevice *p= ci_dev) } } =20 -static void nvme_init_pmr(NvmeCtrl *n, PCIDevice *pci_dev) +static bool nvme_init_pmr(NvmeCtrl *n, PCIDevice *pci_dev, Error **errp) { uint32_t pmrcap =3D ldl_le_p(&n->bar.pmrcap); =20 + if (memory_region_size(&n->pmr.dev->mr) < 16) { + error_setg(errp, "PMR device must have at least 16 bytes"); + return false; + } + NVME_PMRCAP_SET_RDS(pmrcap, 1); NVME_PMRCAP_SET_WDS(pmrcap, 1); NVME_PMRCAP_SET_BIR(pmrcap, NVME_PMR_BIR); @@ -8837,6 +8842,8 @@ static void nvme_init_pmr(NvmeCtrl *n, PCIDevice *pci= _dev) PCI_BASE_ADDRESS_MEM_PREFETCH, &n->pmr.dev->mr); =20 memory_region_set_enabled(&n->pmr.dev->mr, false); + + return true; } =20 static uint64_t nvme_mbar_size(unsigned total_queues, unsigned total_irqs, @@ -9055,7 +9062,9 @@ static bool nvme_init_pci(NvmeCtrl *n, PCIDevice *pci= _dev, Error **errp) } =20 if (n->pmr.dev) { - nvme_init_pmr(n, pci_dev); + if (!nvme_init_pmr(n, pci_dev, errp)) { + return false; + } } =20 return true; diff --git a/tests/qtest/nvme-test.c b/tests/qtest/nvme-test.c index 5ad6821f7af..4aec1651e6e 100644 --- a/tests/qtest/nvme-test.c +++ b/tests/qtest/nvme-test.c @@ -149,7 +149,7 @@ static void nvme_register_nodes(void) .before_cmd_line =3D "-drive id=3Ddrv0,if=3Dnone,file=3Dnull-co://= ," "file.read-zeroes=3Don,format=3Draw " "-object memory-backend-ram,id=3Dpmr0," - "share=3Don,size=3D8", + "share=3Don,size=3D16", }; =20 add_qpci_address(&opts, &(QPCIAddress) { .devfn =3D QPCI_DEVFN(4, 0) }= ); --=20 2.51.0