From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155178; cv=none; d=zohomail.com; s=zohoarc; b=GHkF3L6D3rEsUFdAziFrhqIGObscUAku/WofcmXBk/BkvusHyOKU19+uDsEpZq70t4ONOkXRzAY7O/K9UosMoph2MuBofZvTcHB7FCqIzezPRwZl/BLuNh4LRh/RWL5Ckf4BZzsKNRB8Xy8v3lehZwk5pVKgPhpMMR01v7QK0QQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155178; 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=3JXU/iDoCeiLKmXbMmkzTXvAvxJfUqOqd0YNU9sN6g0=; b=d3b3WDL8MXxZMN+B6i06zLZ/PsEdAG0gE/euBY0Xpk2ETuW15OYLrVtuY6WdpfktwaQneEo6nNRROKK4nWatU0ZoX9enWjCAq6ojj4CClxoqdt62eykWFOOiSfjn2v3OhEissENkxyBRu2RfUbJGe40GudcNVHci+msfw0sLSA4= 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 1746155178114699.8059621051035; Thu, 1 May 2025 20:06:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgi8-0001JG-BX; Thu, 01 May 2025 23:05:12 -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 1uAgi3-0001HY-IG; Thu, 01 May 2025 23:05:08 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgi0-00085t-Py; Thu, 01 May 2025 23:05:07 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-736c277331eso2626096b3a.1; Thu, 01 May 2025 20:05:03 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.04.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155102; x=1746759902; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3JXU/iDoCeiLKmXbMmkzTXvAvxJfUqOqd0YNU9sN6g0=; b=Yt2OAVx70ptomdtIlhaRrark4bdrOHJmwrz/0q00hrbfBx6Ngl7ddmEUHnW1BKnNFG ZF3Il3z7fcASF7B3WnyPmWBRFOEKnOdQT5myScWpJSK26h6cRQjC3Q5GUL8k03+baHV/ 1QyOofRE7t54ktvU7Ft0IMOYvIQuD/1FRmjCPtDApsgflm4WjW3b3v4F+/XYBbya9DTh Rn0PeLJfCyK2aRFRsjkYdwoy1K/hI/NMR/CmKTa8L0fLlt4hvJnlp2DUCZ0i6v/S7TEb n6MZ0gO3qpuRcC83nQRylVWvhaqdflRnsZSHZlF1Z9BJYr9LSkrscSt3PL4Z0nEemwru AbMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155102; x=1746759902; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3JXU/iDoCeiLKmXbMmkzTXvAvxJfUqOqd0YNU9sN6g0=; b=mv/4JtZqRIs/1bnx5UvBmP4+47qPIq++qYq6aBlgb178NGWgMGxvHEbmmjes2WFeQd cb3irSJmVtVLbMAtAwzhSZ2oswfddso+rTfpx9zH+ALwUAN6XN/SofYmfiychpkGwsvG tsFHwTwJyS0OgXOn05GwCEbTEde6zgnBJmEKHyPYhrn24dY2DaYqU+LZpGsgo0S5GxnS yjyVWWS3SgfaOhAuqPayCYhr7UTENu47s2IyoKHBb08tYmJo8B99rqCslWBtyDVhhzKb T4fLjGW4pUqh+I8XwnrVNgYiD5SxNMFHX5ebh6XszM1R/b+CMKOMnpO2b0pZsvIlOHgh 3Vag== X-Forwarded-Encrypted: i=1; AJvYcCUfnqZd1CdMWJun+KGkUJ3iTQbWmEJlBIPU0vDl7F/DrUMfFSwKmkajicOiQQxDu892G2q3f6zCdfMU@nongnu.org, AJvYcCX3rsClNuFticfMT1V1xyBew4pMaiCLGRsBB3s1Mrd4Qh94hYjLQ6Gz6Ntv/dfcKqQn3FuINoZErqU=@nongnu.org X-Gm-Message-State: AOJu0Yz11pdKMzp2C8/LKXi8ku7zAmoJbVTM707lsiyP2rOBNMfPdvVD WrDFqQmpl6RlSovxwp+eEwxfdoMABLsKysWSG6adxC4UPml97wJ6A7GOCA== X-Gm-Gg: ASbGncvTRdnJzktyirdtuYHOJMI0I7xpoK/ZmXuDnxVZb1+vXolJCggjCN+X+0PyJ0/ /g7IEkE08HzV9iBNwYZ5DzynNs6d/OlTa2xdUIDTe4YzELxem9J5qPUg1fepIdwbxtHxAqW4EM7 zMjrHspRPbvmEuSDIRnUK1/FD9LkfuPZ0T+L5fR0AyJg/MBdRj+7y3bT1rZ25CoWtpqYNtlwsik Xl7CSjGVYENr6vWfNgUaHycOnNNNglhfEZDAK8720I+5BqX7yr85SAlIDADK9gCEVCDnfrCBKRE rXeROUKiqqmN5F9me5A/q5vVvH+h6OR98QTZhL+6z65f X-Google-Smtp-Source: AGHT+IE1TAhhAkAbMCCVRp0HJFL4kEabWfS6X3KcU09ld7Ry/K2Ij1Hsy0zzlqMy1lLIZMKGE5wsrA== X-Received: by 2002:a05:6a21:8cc7:b0:1ee:b5f4:b1d7 with SMTP id adf61e73a8af0-20ccbf33d54mr2133540637.7.1746155101902; Thu, 01 May 2025 20:05:01 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 01/11] tests/qtest: Enforce zero for the "un-fired" msix message value Date: Fri, 2 May 2025 13:04:35 +1000 Message-ID: <20250502030446.88310-2-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> 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=2607:f8b0:4864:20::42c; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42c.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155181297124100 virtio-pci detects an unmasked msix interrupt has fired by looking for the data payload value at the target address. If a value of zero is enforced for the memory value when an interrupt has not fired, then an assertion can be added to catch the case where something changed the memory to an unexpected value. This catches an endian conversion bug in the message value when running these tests on a big endian target. Previously the test just times out waiting for interrupt, after this it fails nicely. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/virtio-pci-modern.c | 9 +++++---- tests/qtest/libqos/virtio-pci.c | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/tests/qtest/libqos/virtio-pci-modern.c b/tests/qtest/libqos/vi= rtio-pci-modern.c index 4e67fcbd5d3..f31b3be656d 100644 --- a/tests/qtest/libqos/virtio-pci-modern.c +++ b/tests/qtest/libqos/virtio-pci-modern.c @@ -137,12 +137,13 @@ static bool get_msix_status(QVirtioPCIDevice *dev, ui= nt32_t msix_entry, } =20 data =3D qtest_readl(dev->pdev->bus->qts, msix_addr); - if (data =3D=3D msix_data) { - qtest_writel(dev->pdev->bus->qts, msix_addr, 0); - return true; - } else { + if (data =3D=3D 0) { return false; } + /* got a message, ensure it matches expected value then clear it. */ + g_assert_cmphex(data, =3D=3D, msix_data); + qtest_writel(dev->pdev->bus->qts, msix_addr, 0); + return true; } =20 static bool get_queue_isr_status(QVirtioDevice *d, QVirtQueue *vq) diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pc= i.c index 002bf8b8c2d..102e45b5248 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -132,12 +132,13 @@ static bool qvirtio_pci_get_queue_isr_status(QVirtioD= evice *d, QVirtQueue *vq) return qpci_msix_pending(dev->pdev, vqpci->msix_entry); } else { data =3D qtest_readl(dev->pdev->bus->qts, vqpci->msix_addr); - if (data =3D=3D vqpci->msix_data) { - qtest_writel(dev->pdev->bus->qts, vqpci->msix_addr, 0); - return true; - } else { + if (data =3D=3D 0) { return false; } + /* got a message, ensure it matches expected value then clear = it. */ + g_assert_cmphex(data, =3D=3D, vqpci->msix_data); + qtest_writel(dev->pdev->bus->qts, vqpci->msix_addr, 0); + return true; } } else { return qpci_io_readb(dev->pdev, dev->bar, VIRTIO_PCI_ISR) & 1; @@ -156,12 +157,13 @@ static bool qvirtio_pci_get_config_isr_status(QVirtio= Device *d) return qpci_msix_pending(dev->pdev, dev->config_msix_entry); } else { data =3D qtest_readl(dev->pdev->bus->qts, dev->config_msix_add= r); - if (data =3D=3D dev->config_msix_data) { - qtest_writel(dev->pdev->bus->qts, dev->config_msix_addr, 0= ); - return true; - } else { + if (data =3D=3D 0) { return false; } + /* got a message, ensure it matches expected value then clear = it. */ + g_assert_cmphex(data, =3D=3D, dev->config_msix_data); + qtest_writel(dev->pdev->bus->qts, dev->config_msix_addr, 0); + return true; } } else { return qpci_io_readb(dev->pdev, dev->bar, VIRTIO_PCI_ISR) & 2; @@ -323,6 +325,7 @@ void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVi= rtQueuePCI *vqpci, vqpci->msix_entry =3D entry; =20 vqpci->msix_addr =3D guest_alloc(alloc, 4); + qtest_memset(d->pdev->bus->qts, vqpci->msix_addr, 0, 4); qpci_io_writel(d->pdev, d->pdev->msix_table_bar, off + PCI_MSIX_ENTRY_LOWER_ADDR, vqpci->msix_addr & ~0U= L); qpci_io_writel(d->pdev, d->pdev->msix_table_bar, @@ -355,6 +358,7 @@ void qvirtio_pci_set_msix_configuration_vector(QVirtioP= CIDevice *d, =20 d->config_msix_data =3D 0x12345678; d->config_msix_addr =3D guest_alloc(alloc, 4); + qtest_memset(d->pdev->bus->qts, d->config_msix_addr, 0, 4); =20 qpci_io_writel(d->pdev, d->pdev->msix_table_bar, off + PCI_MSIX_ENTRY_LOWER_ADDR, d->config_msix_addr & = ~0UL); --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155247; cv=none; d=zohomail.com; s=zohoarc; b=FhzniJPaY9gxo4cwkpjWiCypWGODdTB08TydLh9gX58DNfUA20vEUaXtZ0THmXBqZ+w9Y8dSR1HWNpqjOfNNNGh4whwxgz1uHXwB/wED3UeeiS/xte/n6lAsazLaTUEFsqD5rTE7TM/SKbkVgh90ODR9DnZLOJ1mUai1fpAisuE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155247; 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=oyvoNMD/MGbgPmwNNQJl9p2mFi5GZdgxMiyr2KvPotM=; b=hzIfj0l2C0f36JgY0UAOllULqavqDfxvvL96UrsPHym/QbthmkgC2SrP9XiBcjOWVuGm6Vno6BV20bswrx6FSX1VZ8kn9u2fZvx40Dj0Q+52UJRyyCZAbShC32dJ+1oQBMXTmE2/f6emgG9UMBXWHhJX+mTtQ86v0uZFYd67JTY= 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 1746155247342538.6386697511515; Thu, 1 May 2025 20:07:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiC-0001KP-BI; Thu, 01 May 2025 23:05:16 -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 1uAgi9-0001JZ-5C; Thu, 01 May 2025 23:05:13 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgi6-00087P-O9; Thu, 01 May 2025 23:05:12 -0400 Received: by mail-pf1-x431.google.com with SMTP id d2e1a72fcca58-7376dd56eccso1865709b3a.0; Thu, 01 May 2025 20:05:08 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155107; x=1746759907; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oyvoNMD/MGbgPmwNNQJl9p2mFi5GZdgxMiyr2KvPotM=; b=LccGEQ5AtEs0o01GjYRnux3mSrQvKT2mIujeuY2Q9jzmmDrz/ci0yCASFJ5TI/cQVq VOo3mypej6MGkHlJbbRPANV7YxuggqZmMPUL05fR0ptIXAifa0ZIr7uP/OXFTA/EoK3w f/htluUBl994hfTi11qapl6JX/wpVmMrFSwc0W8Mhyo5M9yofXL7Nm6kXgfCmHoGyraH w+Pa70cXfvd2awZRIyktaWXVzktLQmUbFmzP4tqdHHuO+9SiIHvjkc6QzhOu53qG6jyX SwFr3MnSGIK1g3LaQWmTiuCmDKnO55NG+C77AMos5me8bGYsRBj/KoccJDkvMihK+ec1 9Cpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155107; x=1746759907; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oyvoNMD/MGbgPmwNNQJl9p2mFi5GZdgxMiyr2KvPotM=; b=O+fCefC+jFRDNgT3I2trEo+Lk2XB9i7GSpfMLfCKfvF6Rb5FTB4GyG2yJTOuFTefCa QwPjxlu4tUIntBHXol0DY9tQ0YhqfaPDuLRRlnfGs5qoLISjd2fVqOxWycYdcf96DaUx qmFLtkdUtco4zl1Z84zS21TPQFFkvqbH9USoGIpkPECi6Wz2VHPwfWbRxoNjysCo58c1 OoY7Ltwu6ehvljrVBk1LsJ7175h3NHBIprAzGfv4q85F6kInaK3RHd15jOk6BmlI/OrL wmfofj1kcjWPJIeuVKr3+c2mOlgakh6QJZACgogXPYfWoa3jAYRLDCtMxZdxhcPclCed MN1w== X-Forwarded-Encrypted: i=1; AJvYcCU80G0EnbMHxGq2NiJyoIfqiGAMlvK3eahcDyXEJ9Fxs6LFdrwkeF++XJP59xUVgTikEPXNU3QS6i1s@nongnu.org, AJvYcCWayCxUH8wXJT35tLyE9WeTugeiW//NwHFJ7DRtGf6SKHfwZdFH49XUwxhEcQh9Ty23rDw9jE/qAHM=@nongnu.org X-Gm-Message-State: AOJu0YzC2tFZl9LwWlI9lx3oaW25dVoIPJfgZvvaHqXVw3MG1vPM4qLS HlfuQiB30Z+gd6f9fXX7NcgEgPXrZjmMSN+PiMHGOG/oE+gkwFZHCQQ+OQ== X-Gm-Gg: ASbGncteRRHFFNniKlNswRrxDAT4vDDgtFNdzl+qbjE8y2X8EPbJgeX33hbaAPLnCVD hd/gI9upC1CvCeMxv8dCR8ZZsvMHfcsY8jy4HXpdTisdX9cddJQ2mS7ZJGOwnbV4L06EX8Qo8Ii iB7qM8qeTWwaEjk7LMXOrZkgHRBtMBNvule7WcuJVkNaGSP35Ysko0C+wMd49N8052gSFpR3Oh9 PuaZLUs5R67ORUvPag/mJrfQ7qfYS2PsO+UfRIHLBcb5GsafiZHrEcvIgp3132I/e+jpKwtUk4x FODCRvQIvN7pc6Bq/n8Kte6jVQjWywV5DTZbphTkir1X X-Google-Smtp-Source: AGHT+IF5TYxfNmocc6bkCZOdo4qMI6qvavCE3WjJoDgXq/tAspIQhAXCTMzrzHcLSLpchQLCJbTMHQ== X-Received: by 2002:a05:6a21:7702:b0:1f5:9431:46e7 with SMTP id adf61e73a8af0-20ce04e692bmr1754858637.42.1746155107511; Thu, 01 May 2025 20:05:07 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 02/11] tests/qtest: Fix virtio msix message endianness Date: Fri, 2 May 2025 13:04:36 +1000 Message-ID: <20250502030446.88310-3-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> 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=2607:f8b0:4864:20::431; envelope-from=npiggin@gmail.com; helo=mail-pf1-x431.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155249200124100 msix messages are written to memory in little-endian order, so they should not be byteswapped depending on target endianness, but read as le and converted to host endian by the qtest. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/virtio-pci-modern.c | 4 +++- tests/qtest/libqos/virtio-pci.c | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/qtest/libqos/virtio-pci-modern.c b/tests/qtest/libqos/vi= rtio-pci-modern.c index f31b3be656d..5dae41e6d74 100644 --- a/tests/qtest/libqos/virtio-pci-modern.c +++ b/tests/qtest/libqos/virtio-pci-modern.c @@ -8,6 +8,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/bswap.h" #include "standard-headers/linux/pci_regs.h" #include "standard-headers/linux/virtio_pci.h" #include "standard-headers/linux/virtio_config.h" @@ -136,7 +137,8 @@ static bool get_msix_status(QVirtioPCIDevice *dev, uint= 32_t msix_entry, return qpci_msix_pending(dev->pdev, msix_entry); } =20 - data =3D qtest_readl(dev->pdev->bus->qts, msix_addr); + qtest_memread(dev->pdev->bus->qts, msix_addr, &data, 4); + data =3D le32_to_cpu(data); if (data =3D=3D 0) { return false; } diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pc= i.c index 102e45b5248..76ea1f45ba9 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -131,7 +131,8 @@ static bool qvirtio_pci_get_queue_isr_status(QVirtioDev= ice *d, QVirtQueue *vq) /* No ISR checking should be done if masked, but read anyway */ return qpci_msix_pending(dev->pdev, vqpci->msix_entry); } else { - data =3D qtest_readl(dev->pdev->bus->qts, vqpci->msix_addr); + qtest_memread(dev->pdev->bus->qts, vqpci->msix_addr, &data, 4); + data =3D le32_to_cpu(data); if (data =3D=3D 0) { return false; } @@ -156,7 +157,8 @@ static bool qvirtio_pci_get_config_isr_status(QVirtioDe= vice *d) /* No ISR checking should be done if masked, but read anyway */ return qpci_msix_pending(dev->pdev, dev->config_msix_entry); } else { - data =3D qtest_readl(dev->pdev->bus->qts, dev->config_msix_add= r); + qtest_memread(dev->pdev->bus->qts, dev->config_msix_addr, &dat= a, 4); + data =3D le32_to_cpu(data); if (data =3D=3D 0) { return false; } --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155225; cv=none; d=zohomail.com; s=zohoarc; b=Iyztav92UjuKoaUuKCk2LHCpUUoD00uTw5oZ+F8ILTZ+zSOg5Xy+DkPYSGqGTo8vOpjiOCdxllF65RN1Y8ZFwSpBpzTx5XRrioQplHMZ56tBEM9W7/5zgV2tq4OqdzZOJ13xmZ7mou8HL/+L/Lj64S+1ag7zjXYPuGHKkRQerBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155225; 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=W77vlivYJ42VB0S6zdFNj4APmV0zHeYCYhnqX6BBAyE=; b=KbRTCdyhkaovENqkTcxELgFRafGUuETfCNapGc/F4wq+QcvfeafgPppNCq60VRUW1YlpFLa2Fj04rVx0+VUVaYYnJX3qpBhMVBnFEbmCiObSpP/fSdOM584OX/rg+0+DcJBc6+0E69UR4Wz9QRkA+HTJAe3e5CjUqmngkYWL9uk= 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 1746155225532520.4506406435465; Thu, 1 May 2025 20:07:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiK-0001MB-29; Thu, 01 May 2025 23:05:24 -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 1uAgiG-0001Lf-9B; Thu, 01 May 2025 23:05:21 -0400 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgiC-00089g-R5; Thu, 01 May 2025 23:05:20 -0400 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-739525d4e12so1641171b3a.3; Thu, 01 May 2025 20:05:14 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155113; x=1746759913; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=W77vlivYJ42VB0S6zdFNj4APmV0zHeYCYhnqX6BBAyE=; b=WMfdRQaeakMvJFfyWsbDryd8ZMVxXr1xAHusW1GjOd6YqE43YFVQ7lxY7YjZgqr7tB 2RKpvFuWWhAy0Bs6GODfBiQMU8IbU4/D0xoY3hxB/1LdLUSwrKMBKZlWOnPqQhI4YKcX eyFMVMDYA2PBNCvEkSlz0dbEklO0CHoARjNe8YL8Pyhi/5TC9nEzqL9ioHFYcGS1Wj2j yPAU3PwmqxuCCW3u671/EitCLznEg15fEXHo37fFi1J8UVkR2yYcvdF+eghLh7oEbsLl KQvJMZ+pVQo0y/OtEaX8KMJpUbXuf1Yjb7uBsezhkKxHXj6rXsF0X+QfYhkZhGHeRMAL TxBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155113; x=1746759913; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=W77vlivYJ42VB0S6zdFNj4APmV0zHeYCYhnqX6BBAyE=; b=igJ6Y4to8Taqb0VVVt5Zmn4aan4DjWVfnfpPqEvEA8kOMv7zuFl53eZ6WNm5rujP2m g54BpVgmCekngrcHcNCzBJrUN3wFH1YjwLKgUKiDBjXGlfcdn0+ggvMw4myTKvFUgwy/ 3+U9MGitNDrN6AdMNowpbz9Hmrd6/cs4Ui14jIcMj0IXU7PQRt/h326y9WHWsf4Ocxas XsCTv2w8IM0pfxIC0B28ou+oKU2EZXuCaXzMVirvoX6n0IACYGvuv56owIf61FGToQfo Ey9id7DIcKsQATA4OdXjqtjEEJmj6+NWs73BixiDgWuOAo3hzi/QTCoy7tJNl7vaF85y 15yQ== X-Forwarded-Encrypted: i=1; AJvYcCVPptWM8m/datVtQAWPptZC9Jf/4z+3S3RwWzNDdweuxCcoIP9xFL0jADyIpjgCz5HjRRMoUsj00mU=@nongnu.org, AJvYcCWPQavb3SXEIcSzT3xJ6Zk4OpQuOkMj3KhWeLzklgEttmbfoh3ki49NVkqa1kbaLkp+kZjHEtfHievl@nongnu.org X-Gm-Message-State: AOJu0YwstvgfBFjTvkCFsC2yRzaiYSb705cQ3wknDBBSxNGAdsjd/82J VtbC/K7iHVPjTT6Jk9mzwFs4XpNM2FxYMvRMU81am8dB3ctaK0lvmxNuQg== X-Gm-Gg: ASbGncuFMoQjqB0wIwh4efwIg9CuPQCqDh75C+BG/nSZ3qUlZTlXYlWXCaUzzoAIhIr zO73EilxUeMHkFbwc0Fx0lJIupr8Mgw4lIV7bWitgPyEwZSCpUmmoSWS/iIYY9gXr37TLDNVQx/ SYepeXrEMjsA3hQI6P77Ms0IPY0lFDc9EDrN+fKBXxU+LpbRxUnsPpEq4QksWDnYriC/+tgboNP FrjB3ZPnw4wXQys18heJ2b5aCTCeNnQRfi7tL/MUwA1D2w/tcROBPvZZn2Bo5UvD//NZ1Ek6pAd WUOyYjCpscr+YZ6ENiwuKMCae62r6aVCzTsd7ikhIQGQ X-Google-Smtp-Source: AGHT+IH7vM94N//YGGTTZRY6IMwqmnn4tB75npsy3PW818+r0wUdbnicD+dmvvYB+H5xSw/eUY53Aw== X-Received: by 2002:a05:6a20:939d:b0:1f5:6e71:e45 with SMTP id adf61e73a8af0-20cdfee995bmr1880681637.27.1746155113434; Thu, 01 May 2025 20:05:13 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 03/11] tests/qtest: Add libqos function for testing msix interrupt status Date: Fri, 2 May 2025 13:04:37 +1000 Message-ID: <20250502030446.88310-4-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> 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=2607:f8b0:4864:20::42c; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42c.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155226980019100 This function is duplicated 3 times, with more potential future users. Factor it into libqos, using qtest_memset instead of qtest_writel to clear the message just because that looks nicer with the qtest_memread used to read it. Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 2 ++ tests/qtest/libqos/pci.c | 48 ++++++++++++++++++++++++++ tests/qtest/libqos/virtio-pci-modern.c | 31 +++-------------- tests/qtest/libqos/virtio-pci.c | 40 ++++----------------- 4 files changed, 62 insertions(+), 59 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index 83896145235..9f8f154c301 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -92,6 +92,8 @@ void qpci_msix_enable(QPCIDevice *dev); void qpci_msix_disable(QPCIDevice *dev); bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry); bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry); +bool qpci_msix_test_interrupt(QPCIDevice *dev, uint32_t msix_entry, + uint64_t msix_addr, uint32_t msix_data); uint16_t qpci_msix_table_size(QPCIDevice *dev); =20 uint8_t qpci_config_readb(QPCIDevice *dev, uint8_t offset); diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index a59197b9922..773fd1fb6cf 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -351,6 +351,54 @@ bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry) } } =20 +/** + * qpci_msix_test_interrupt - test whether msix interrupt has been raised + * @dev: PCI device + * @msix_entry: msix entry to test + * @msix_addr: address of msix message + * @msix_data: expected msix message payload + * + * This tests whether the msix source has raised an interrupt. If the msix + * entry is masked, it tests the pending bit array for a pending message + * and @msix_addr and @msix_data need not be supplied. If the entry is not + * masked, it tests the address for corresponding data to see if the inter= rupt + * fired. + * + * Note that this does not lower the interrupt, however it does clear the + * msix message address to 0 if it is found set. This must be called with + * the msix address memory containing either 0 or the value of data, other= wise + * it will assert on incorrect message. + */ +bool qpci_msix_test_interrupt(QPCIDevice *dev, uint32_t msix_entry, + uint64_t msix_addr, uint32_t msix_data) +{ + uint32_t data; + + g_assert(dev->msix_enabled); + g_assert_cmpint(msix_entry, !=3D, -1); + + if (qpci_msix_masked(dev, msix_entry)) { + /* No ISR checking should be done if masked, but read anyway */ + return qpci_msix_pending(dev, msix_entry); + } + + g_assert_cmpint(msix_addr, !=3D, 0); + g_assert_cmpint(msix_data, !=3D, 0); + + /* msix payload is written in little-endian format */ + qtest_memread(dev->bus->qts, msix_addr, &data, 4); + data =3D le32_to_cpu(data); + if (data =3D=3D 0) { + return false; + } + + /* got a message, ensure it matches expected value then clear it. */ + g_assert_cmphex(data, =3D=3D, msix_data); + qtest_memset(dev->bus->qts, msix_addr, 0, 4); + + return true; +} + uint16_t qpci_msix_table_size(QPCIDevice *dev) { uint8_t addr; diff --git a/tests/qtest/libqos/virtio-pci-modern.c b/tests/qtest/libqos/vi= rtio-pci-modern.c index 5dae41e6d74..0d7d89bbcb1 100644 --- a/tests/qtest/libqos/virtio-pci-modern.c +++ b/tests/qtest/libqos/virtio-pci-modern.c @@ -126,28 +126,6 @@ static void set_status(QVirtioDevice *d, uint8_t statu= s) status); } =20 -static bool get_msix_status(QVirtioPCIDevice *dev, uint32_t msix_entry, - uint32_t msix_addr, uint32_t msix_data) -{ - uint32_t data; - - g_assert_cmpint(msix_entry, !=3D, -1); - if (qpci_msix_masked(dev->pdev, msix_entry)) { - /* No ISR checking should be done if masked, but read anyway */ - return qpci_msix_pending(dev->pdev, msix_entry); - } - - qtest_memread(dev->pdev->bus->qts, msix_addr, &data, 4); - data =3D le32_to_cpu(data); - if (data =3D=3D 0) { - return false; - } - /* got a message, ensure it matches expected value then clear it. */ - g_assert_cmphex(data, =3D=3D, msix_data); - qtest_writel(dev->pdev->bus->qts, msix_addr, 0); - return true; -} - static bool get_queue_isr_status(QVirtioDevice *d, QVirtQueue *vq) { QVirtioPCIDevice *dev =3D container_of(d, QVirtioPCIDevice, vdev); @@ -155,8 +133,8 @@ static bool get_queue_isr_status(QVirtioDevice *d, QVir= tQueue *vq) if (dev->pdev->msix_enabled) { QVirtQueuePCI *vqpci =3D container_of(vq, QVirtQueuePCI, vq); =20 - return get_msix_status(dev, vqpci->msix_entry, vqpci->msix_addr, - vqpci->msix_data); + return qpci_msix_test_interrupt(dev->pdev, vqpci->msix_entry, + vqpci->msix_addr, vqpci->msix_data= ); } =20 return qpci_io_readb(dev->pdev, dev->bar, dev->isr_cfg_offset) & 1; @@ -167,8 +145,9 @@ static bool get_config_isr_status(QVirtioDevice *d) QVirtioPCIDevice *dev =3D container_of(d, QVirtioPCIDevice, vdev); =20 if (dev->pdev->msix_enabled) { - return get_msix_status(dev, dev->config_msix_entry, - dev->config_msix_addr, dev->config_msix_dat= a); + return qpci_msix_test_interrupt(dev->pdev, dev->config_msix_entry, + dev->config_msix_addr, + dev->config_msix_data); } =20 return qpci_io_readb(dev->pdev, dev->bar, dev->isr_cfg_offset) & 2; diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pc= i.c index 76ea1f45ba9..ea8114e2438 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -122,25 +122,12 @@ static void qvirtio_pci_set_status(QVirtioDevice *d, = uint8_t status) static bool qvirtio_pci_get_queue_isr_status(QVirtioDevice *d, QVirtQueue = *vq) { QVirtioPCIDevice *dev =3D container_of(d, QVirtioPCIDevice, vdev); - QVirtQueuePCI *vqpci =3D (QVirtQueuePCI *)vq; - uint32_t data; =20 if (dev->pdev->msix_enabled) { - g_assert_cmpint(vqpci->msix_entry, !=3D, -1); - if (qpci_msix_masked(dev->pdev, vqpci->msix_entry)) { - /* No ISR checking should be done if masked, but read anyway */ - return qpci_msix_pending(dev->pdev, vqpci->msix_entry); - } else { - qtest_memread(dev->pdev->bus->qts, vqpci->msix_addr, &data, 4); - data =3D le32_to_cpu(data); - if (data =3D=3D 0) { - return false; - } - /* got a message, ensure it matches expected value then clear = it. */ - g_assert_cmphex(data, =3D=3D, vqpci->msix_data); - qtest_writel(dev->pdev->bus->qts, vqpci->msix_addr, 0); - return true; - } + QVirtQueuePCI *vqpci =3D (QVirtQueuePCI *)vq; + + return qpci_msix_test_interrupt(dev->pdev, vqpci->msix_entry, + vqpci->msix_addr, vqpci->msix_data= ); } else { return qpci_io_readb(dev->pdev, dev->bar, VIRTIO_PCI_ISR) & 1; } @@ -149,24 +136,11 @@ static bool qvirtio_pci_get_queue_isr_status(QVirtioD= evice *d, QVirtQueue *vq) static bool qvirtio_pci_get_config_isr_status(QVirtioDevice *d) { QVirtioPCIDevice *dev =3D container_of(d, QVirtioPCIDevice, vdev); - uint32_t data; =20 if (dev->pdev->msix_enabled) { - g_assert_cmpint(dev->config_msix_entry, !=3D, -1); - if (qpci_msix_masked(dev->pdev, dev->config_msix_entry)) { - /* No ISR checking should be done if masked, but read anyway */ - return qpci_msix_pending(dev->pdev, dev->config_msix_entry); - } else { - qtest_memread(dev->pdev->bus->qts, dev->config_msix_addr, &dat= a, 4); - data =3D le32_to_cpu(data); - if (data =3D=3D 0) { - return false; - } - /* got a message, ensure it matches expected value then clear = it. */ - g_assert_cmphex(data, =3D=3D, dev->config_msix_data); - qtest_writel(dev->pdev->bus->qts, dev->config_msix_addr, 0); - return true; - } + return qpci_msix_test_interrupt(dev->pdev, dev->config_msix_entry, + dev->config_msix_addr, + dev->config_msix_data); } else { return qpci_io_readb(dev->pdev, dev->bar, VIRTIO_PCI_ISR) & 2; } --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155268; cv=none; d=zohomail.com; s=zohoarc; b=AhJO4E6P+qlp2cXyigQZMqpEWl4EH7PmaAbfQ4XLswvk6kb9KQmZPn4wsyrtNeVW73mhCPpKsq9oy9CsEjgtHDMV9d16iUzY/SMA1lD8z7XC/Atom7sNj32eXCncs5RGF0+qyyVfEEtev0BupPGq0copZUSTulYh8ZpZG0+QAlA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155268; h=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=07tFD1x9N80fjnrYoGuXzpd58FJGrH3FYFvyLxWlK7Y=; b=OshWUj2in0I6mNZpxmmfD+i+NaLmzVzc/62civsAfZij7qgvbarDfHPNJfQIB6qwCmO7yeukIm4DQKsooEQLqXAwo9DUBICChkHzNL+ngAv0GB1gK/076n4TllFIyn0nzaf4UdayW6xi7/TiX8BqeVWPMZs3BDV7sCKbatB6kUs= 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 1746155268178756.9440331358247; Thu, 1 May 2025 20:07:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiM-0001NQ-Cc; Thu, 01 May 2025 23:05:26 -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 1uAgiK-0001MK-GU; Thu, 01 May 2025 23:05:24 -0400 Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgiI-0008Ui-6o; Thu, 01 May 2025 23:05:24 -0400 Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-7398d65476eso1347558b3a.1; Thu, 01 May 2025 20:05:20 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155119; x=1746759919; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=07tFD1x9N80fjnrYoGuXzpd58FJGrH3FYFvyLxWlK7Y=; b=i8ryww1g2sEyiQUZY0l6rfhF2hRff3uw0VK5gM5hP1SMsYQzZgAVdlMEXUDHM+YLNB SRooCxV6DSBrWoBR6xqfl/s5S7eDtajjAFuyJ/MmPxSReHQfS2KCY9euPZoM14YigSwt a3/JsFRW8p1tGDEP7oYZaqKveQIscobf6ui7weJyKjwZJWvaCCWVNzI/nZ5Qj11j2j8m Dw9g2XE+e8RZrVXvYdOZcztv/VbjnfjD2X6hEw4y4Ifk89ZkSkBau+gI+t9WKaa7cP5j Dc2EHYil3wBS38vTWBkI1dE58HYScUFBoK2FIlS0nB3CB5JiFevV7sJ8cmtcgfDZxuff 4tow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155119; x=1746759919; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=07tFD1x9N80fjnrYoGuXzpd58FJGrH3FYFvyLxWlK7Y=; b=mBzZ6gL7GnX19S+hGwowPSdIHoleTFZDAUPymIElnrCZPxsMPVLVIJ+56Mq0cmNbVU kVBGYHWGL6Q92OmYVu+N13z16xxY/ZwrYZY1l1I27DjGKA2427eTflDAflM1JAQWjYae 1yQiWz7Ou5UVtDPqQXyd7uk4T5sm46Q5KX1jrLVwKRAU7E0MVR7AlRvpQlJIOZey5mGs 6W0/4c6eQwoivkmGOpQKp8wwmEGRqH1jzqm1/wqu73OOnScABK99Q8avOxY29GM8nTkj X4kPZO2xlFhQaAiyYECbfIAbvis5P5XkwL2+NmIZPRgOP5ud0kmRyXI1P8tG8HA1glmV cDzQ== X-Forwarded-Encrypted: i=1; AJvYcCUe/4roI7YLGGxey+kb+3wxHT+VqbqCBcDu3g8F1Od5CRkuEw2lyQEGYr9uHJAHgQpybzmRw1NiWhY=@nongnu.org, AJvYcCXyIa77Xh5zVsSzcA0o7AOuK9ogMh9zbW4UGmyNv36xBiQfVeYviAyqSOGX0QooYbfseSNoz4uy4l5X@nongnu.org X-Gm-Message-State: AOJu0Yy181/rx/3KYLzzf3fdXowH6wk7SOud4rp7yzR6pc5JPGM9EXiA wbHtdV0ghnt8dWBXUR62mFVdggmS5dxBoQHdiGgy82olAq2yI90NIjqrAA== X-Gm-Gg: ASbGncuirO+JWGPiebrH65SVnIBu0zOtL62dBsOeyVprpLm5743TJoKoVKMZRZhxC4y LLoOgjBe3nupDZZOs75M1ck9sYHgLrfKu6s+Vdq6lF4iUa+u/3HXm0v5LJHQtPn36jvpon6b7Ah NJ9GjnTmdONOGHIiHAvrP27BgSkShzECBSPTlTqaWbS6PJWcXlr+WE14QbnCGgHh5dRlU1+5wfL JIB9z/QhWilLI1ZClVpZ4W22kD0k31BCcUOhNPi78Z2JPnfT7nG1QqWuAuOVzIQjQ7X0yW8P3C5 jYAY7C+Ac+l/AnJE7d5rAvQiR/JG446OkEgI90PfCWUy X-Google-Smtp-Source: AGHT+IGHwGmYXhVcTmKm/5IdcDuzNCBpUOAQAeTNmirLVAZHAdUcAjb0ZiHuonS9crSHT/2Vk3KNxA== X-Received: by 2002:a05:6a00:32c8:b0:736:9f2e:1357 with SMTP id d2e1a72fcca58-74057c547famr2372350b3a.12.1746155119354; Thu, 01 May 2025 20:05:19 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 04/11] tests/qtest: Enable spapr dma with linear iommu map Date: Fri, 2 May 2025 13:04:38 +1000 Message-ID: <20250502030446.88310-5-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::430; envelope-from=npiggin@gmail.com; helo=mail-pf1-x430.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155269404124100 Content-Type: text/plain; charset="utf-8" qtests spapr dma was broken because the iommu was not set up. spapr requires hypercalls to set up the iommu (TCE tables), but there is no support for that or a side-channel to the iommu in qtests at the moment, so add a quick workaround in QEMU to have the spapr iommu provide a linear map to memory when running qtests. The buggy msix checks can all be removed since the tests all work now. Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 4 ---- hw/ppc/spapr_iommu.c | 10 +++++++++- tests/qtest/e1000e-test.c | 21 --------------------- tests/qtest/igb-test.c | 21 --------------------- tests/qtest/libqos/generic-pcihost.c | 1 - tests/qtest/libqos/pci-pc.c | 3 --- tests/qtest/libqos/pci-spapr.c | 7 ++++--- tests/qtest/libqos/pci.c | 14 -------------- tests/qtest/vhost-user-blk-test.c | 6 ------ tests/qtest/virtio-blk-test.c | 12 ------------ 10 files changed, 13 insertions(+), 86 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index 9f8f154c301..ef40a6917d3 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -51,7 +51,6 @@ struct QPCIBus { QTestState *qts; uint64_t pio_alloc_ptr, pio_limit; uint64_t mmio_alloc_ptr, mmio_limit; - bool has_buggy_msi; /* TRUE for spapr, FALSE for pci */ bool not_hotpluggable; /* TRUE if devices cannot be hotplugged */ =20 }; @@ -83,9 +82,6 @@ QPCIDevice *qpci_device_find(QPCIBus *bus, int devfn); void qpci_device_init(QPCIDevice *dev, QPCIBus *bus, QPCIAddress *addr); int qpci_secondary_buses_init(QPCIBus *bus); =20 -bool qpci_has_buggy_msi(QPCIDevice *dev); -bool qpci_check_buggy_msi(QPCIDevice *dev); - void qpci_device_enable(QPCIDevice *dev); uint8_t qpci_find_capability(QPCIDevice *dev, uint8_t id, uint8_t start_ad= dr); void qpci_msix_enable(QPCIDevice *dev); diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c index c2432a0c00c..c89ccc87d71 100644 --- a/hw/ppc/spapr_iommu.c +++ b/hw/ppc/spapr_iommu.c @@ -22,6 +22,8 @@ #include "qemu/log.h" #include "qemu/module.h" #include "system/kvm.h" +#include "system/qtest.h" +#include "exec/target_page.h" #include "kvm_ppc.h" #include "migration/vmstate.h" #include "system/dma.h" @@ -125,7 +127,13 @@ static IOMMUTLBEntry spapr_tce_translate_iommu(IOMMUMe= moryRegion *iommu, .perm =3D IOMMU_NONE, }; =20 - if ((addr >> tcet->page_shift) < tcet->nb_table) { + if (qtest_enabled()) { + /* spapr qtests does not set up the IOMMU, shortcut a linear map */ + ret.iova =3D addr & TARGET_PAGE_MASK; + ret.translated_addr =3D addr & TARGET_PAGE_MASK; + ret.addr_mask =3D ~TARGET_PAGE_MASK; + ret.perm =3D IOMMU_RW; + } else if ((addr >> tcet->page_shift) < tcet->nb_table) { /* Check if we are in bound */ hwaddr page_mask =3D IOMMU_PAGE_MASK(tcet->page_shift); =20 diff --git a/tests/qtest/e1000e-test.c b/tests/qtest/e1000e-test.c index de9738fdb74..8300bf5a5b3 100644 --- a/tests/qtest/e1000e-test.c +++ b/tests/qtest/e1000e-test.c @@ -139,13 +139,6 @@ static void test_e1000e_tx(void *obj, void *data, QGue= stAllocator * alloc) { QE1000E_PCI *e1000e =3D obj; QE1000E *d =3D &e1000e->e1000e; - QOSGraphObject *e_object =3D obj; - QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); - - /* FIXME: add spapr support */ - if (qpci_check_buggy_msi(dev)) { - return; - } =20 e1000e_send_verify(d, data, alloc); } @@ -154,13 +147,6 @@ static void test_e1000e_rx(void *obj, void *data, QGue= stAllocator * alloc) { QE1000E_PCI *e1000e =3D obj; QE1000E *d =3D &e1000e->e1000e; - QOSGraphObject *e_object =3D obj; - QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); - - /* FIXME: add spapr support */ - if (qpci_check_buggy_msi(dev)) { - return; - } =20 e1000e_receive_verify(d, data, alloc); } @@ -173,13 +159,6 @@ static void test_e1000e_multiple_transfers(void *obj, = void *data, =20 QE1000E_PCI *e1000e =3D obj; QE1000E *d =3D &e1000e->e1000e; - QOSGraphObject *e_object =3D obj; - QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); - - /* FIXME: add spapr support */ - if (qpci_check_buggy_msi(dev)) { - return; - } =20 for (i =3D 0; i < iterations; i++) { e1000e_send_verify(d, data, alloc); diff --git a/tests/qtest/igb-test.c b/tests/qtest/igb-test.c index 3d397ea6973..1b3b5aa6c76 100644 --- a/tests/qtest/igb-test.c +++ b/tests/qtest/igb-test.c @@ -142,13 +142,6 @@ static void test_igb_tx(void *obj, void *data, QGuestA= llocator * alloc) { QE1000E_PCI *e1000e =3D obj; QE1000E *d =3D &e1000e->e1000e; - QOSGraphObject *e_object =3D obj; - QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); - - /* FIXME: add spapr support */ - if (qpci_check_buggy_msi(dev)) { - return; - } =20 igb_send_verify(d, data, alloc); } @@ -157,13 +150,6 @@ static void test_igb_rx(void *obj, void *data, QGuestA= llocator * alloc) { QE1000E_PCI *e1000e =3D obj; QE1000E *d =3D &e1000e->e1000e; - QOSGraphObject *e_object =3D obj; - QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); - - /* FIXME: add spapr support */ - if (qpci_check_buggy_msi(dev)) { - return; - } =20 igb_receive_verify(d, data, alloc); } @@ -176,13 +162,6 @@ static void test_igb_multiple_transfers(void *obj, voi= d *data, =20 QE1000E_PCI *e1000e =3D obj; QE1000E *d =3D &e1000e->e1000e; - QOSGraphObject *e_object =3D obj; - QPCIDevice *dev =3D e_object->get_driver(e_object, "pci-device"); - - /* FIXME: add spapr support */ - if (qpci_check_buggy_msi(dev)) { - return; - } =20 for (i =3D 0; i < iterations; i++) { igb_send_verify(d, data, alloc); diff --git a/tests/qtest/libqos/generic-pcihost.c b/tests/qtest/libqos/gene= ric-pcihost.c index 4bbeb5ff508..568897e0ecc 100644 --- a/tests/qtest/libqos/generic-pcihost.c +++ b/tests/qtest/libqos/generic-pcihost.c @@ -182,7 +182,6 @@ void qpci_init_generic(QGenericPCIBus *qpci, QTestState= *qts, =20 qpci->gpex_pio_base =3D 0x3eff0000; qpci->bus.not_hotpluggable =3D !hotpluggable; - qpci->bus.has_buggy_msi =3D false; =20 qpci->bus.pio_readb =3D qpci_generic_pio_readb; qpci->bus.pio_readw =3D qpci_generic_pio_readw; diff --git a/tests/qtest/libqos/pci-pc.c b/tests/qtest/libqos/pci-pc.c index 147009f4f44..8b79d858bd5 100644 --- a/tests/qtest/libqos/pci-pc.c +++ b/tests/qtest/libqos/pci-pc.c @@ -124,9 +124,6 @@ void qpci_init_pc(QPCIBusPC *qpci, QTestState *qts, QGu= estAllocator *alloc) { assert(qts); =20 - /* tests can use pci-bus */ - qpci->bus.has_buggy_msi =3D false; - qpci->bus.pio_readb =3D qpci_pc_pio_readb; qpci->bus.pio_readw =3D qpci_pc_pio_readw; qpci->bus.pio_readl =3D qpci_pc_pio_readl; diff --git a/tests/qtest/libqos/pci-spapr.c b/tests/qtest/libqos/pci-spapr.c index 0f1023e4a73..dfa2087a599 100644 --- a/tests/qtest/libqos/pci-spapr.c +++ b/tests/qtest/libqos/pci-spapr.c @@ -20,6 +20,10 @@ * PCI devices are always little-endian * SPAPR by default is big-endian * so PCI accessors need to swap data endianness + * + * The spapr iommu model has a qtest_enabled() check that short-cuts + * the TCE table and provides a linear map for DMA, since qtests does + * not have a way to make hcalls to set up the TCE table. */ =20 static uint8_t qpci_spapr_pio_readb(QPCIBus *bus, uint32_t addr) @@ -155,9 +159,6 @@ void qpci_init_spapr(QPCIBusSPAPR *qpci, QTestState *qt= s, { assert(qts); =20 - /* tests cannot use spapr, needs to be fixed first */ - qpci->bus.has_buggy_msi =3D true; - qpci->alloc =3D alloc; =20 qpci->bus.pio_readb =3D qpci_spapr_pio_readb; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index 773fd1fb6cf..2bae119bfca 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -53,20 +53,6 @@ void qpci_device_foreach(QPCIBus *bus, int vendor_id, in= t device_id, } } =20 -bool qpci_has_buggy_msi(QPCIDevice *dev) -{ - return dev->bus->has_buggy_msi; -} - -bool qpci_check_buggy_msi(QPCIDevice *dev) -{ - if (qpci_has_buggy_msi(dev)) { - g_test_skip("Skipping due to incomplete support for MSI"); - return true; - } - return false; -} - static void qpci_device_set(QPCIDevice *dev, QPCIBus *bus, int devfn) { g_assert(dev); diff --git a/tests/qtest/vhost-user-blk-test.c b/tests/qtest/vhost-user-blk= -test.c index ea90d41232e..3e71fdb9d78 100644 --- a/tests/qtest/vhost-user-blk-test.c +++ b/tests/qtest/vhost-user-blk-test.c @@ -554,14 +554,8 @@ static void idx(void *obj, void *u_data, QGuestAllocat= or *t_alloc) uint32_t desc_idx; uint8_t status; char *data; - QOSGraphObject *blk_object =3D obj; - QPCIDevice *pci_dev =3D blk_object->get_driver(blk_object, "pci-device= "); QTestState *qts =3D global_qtest; =20 - if (qpci_check_buggy_msi(pci_dev)) { - return; - } - qpci_msix_enable(pdev->pdev); qvirtio_pci_set_msix_configuration_vector(pdev, t_alloc, 0); =20 diff --git a/tests/qtest/virtio-blk-test.c b/tests/qtest/virtio-blk-test.c index 98c906ebb4a..3a005d600c1 100644 --- a/tests/qtest/virtio-blk-test.c +++ b/tests/qtest/virtio-blk-test.c @@ -474,14 +474,8 @@ static void msix(void *obj, void *u_data, QGuestAlloca= tor *t_alloc) uint32_t free_head; uint8_t status; char *data; - QOSGraphObject *blk_object =3D obj; - QPCIDevice *pci_dev =3D blk_object->get_driver(blk_object, "pci-device= "); QTestState *qts =3D global_qtest; =20 - if (qpci_check_buggy_msi(pci_dev)) { - return; - } - qpci_msix_enable(pdev->pdev); qvirtio_pci_set_msix_configuration_vector(pdev, t_alloc, 0); =20 @@ -584,14 +578,8 @@ static void idx(void *obj, void *u_data, QGuestAllocat= or *t_alloc) uint32_t desc_idx; uint8_t status; char *data; - QOSGraphObject *blk_object =3D obj; - QPCIDevice *pci_dev =3D blk_object->get_driver(blk_object, "pci-device= "); QTestState *qts =3D global_qtest; =20 - if (qpci_check_buggy_msi(pci_dev)) { - return; - } - qpci_msix_enable(pdev->pdev); qvirtio_pci_set_msix_configuration_vector(pdev, t_alloc, 0); =20 --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155293; cv=none; d=zohomail.com; s=zohoarc; b=QtprSpdy8Omo4QiVYHiH8anOPdmYZSrFB6VmWobhUDxbOFu0O0f7PbMvex5wOhwytB8SMfK3gOimDxQx40eRObY3FDKsztxxQH5ebT3QNQS3krANQkwR4hcHOufalSZIamWOQSrwQCTrYJ+VEY/Kxec+XMlpSfLYVKQssE+WPI0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155293; h=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=KUOflv3alOGiol4S47wnqGVZoQeo26ssH01OhsbUcno=; b=h1Bcwxv9F58nrT5IiYxnBIQoVf3HNd1b25qEGrs0HM1iu6eADjs+AWSE0CHQydXoAf+vUUtAiCrdi3fb+DB4XqUzGleD6C6E18y3/peBBovxWCv8JzV6tM/dE3aoJ46QWtxexgO5cOMx2DY2nn7IjsjzoVcqUlH6sRBfzZhbxC8= 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 1746155293839582.8260138208624; Thu, 1 May 2025 20:08:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiR-0001Ps-1u; Thu, 01 May 2025 23:05:31 -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 1uAgiP-0001OO-Ao; Thu, 01 May 2025 23:05:29 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgiN-00005E-Jo; Thu, 01 May 2025 23:05:29 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-7376e311086so2381569b3a.3; Thu, 01 May 2025 20:05:26 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155125; x=1746759925; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KUOflv3alOGiol4S47wnqGVZoQeo26ssH01OhsbUcno=; b=K/0JObhJUXGRz+3D7oMdSdwpZ1eHtrscyLuHL3dazYlJkg2nw/m04xOVFyhWvv/vDu VAbdsua7kDXxtBjfBeUB30eFa++cZJr/Co3b2zlW1TKsVGDboxfQvy7m2HlPKyO2xSsS J4vXT2sPCkPnh/VAs736kbSaC4fIvJfFinWIW3YVNAiPwjjuNoz1xm+tGK7S2kESDrPF 8KSPNoBF5+1w08+YFz7b49GLp6WsDGt3wFVlL9VC/q/c5t/oJv5kUOM/BePKNhYjg+fo EBM+wEnsU83cabruPyuT8emdq3UpYFDB0cx10FWSlQ2Ebp3EoCgAgQ+HBlmIDiERBMOL IPuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155125; x=1746759925; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KUOflv3alOGiol4S47wnqGVZoQeo26ssH01OhsbUcno=; b=s+oxEpqtj7CvyF1EEwrli0GiO2VHHQ6iCTtBeRdF6BWteiboF5+2QjAcQUQcSsiTNd QM8aGJ+/RX1xBCq5dQ/oCiEq0lc+OHRbwKSc2eSsNiQE0ISWN9lBH4uBK2ChgTLxk5lC X9iDRVMDr/SbMKE6zunVa3vbfZlVUaCWZfWEdxx5gfTx5GIz6UN4pY5dNcd+AUgQwpkg pOl6e4/UwrpGb0/5460crfVdL7oIdDh5js0FB0xpmM8RJG91TiLYHe7wvQ/mPVdiuquB 9EKjVFMWErUMve41Uh8KEfTEx6tuPhM+KIE37c2ul3Ff9wBu0GMhz5XM7wmeYFfV2s9b eJYg== X-Forwarded-Encrypted: i=1; AJvYcCUTAKeBYoSt5JaumS7y66j03ABqj69u7/JAKWTYiLcIH+t1XW5SQXz+xUfchAL8HX2HIc05FuQnuX84@nongnu.org, AJvYcCUZ4ibpN7sd2cquLKd7p8LdpRno3uGcYJ3odyOhOSAdKnSlf+B6OP2+d7mpO6DvOp+iDS9lxhPgO68=@nongnu.org X-Gm-Message-State: AOJu0YxV5yPHec4kM0fwdnqohxo05Po87Cr6kC5j6JMNW/nsoDWwE8mx jfuwZeYw+9pZ4WgkPcpTh+hZvBGyMvAF5mH4XGVMunNNK79zSQY4KnKdVg== X-Gm-Gg: ASbGncsbJD277f7hkWUWS3j7sXeh8adLeQ/kaqiuXvY1fMMn5/OILOkpsGQSmmCIapd unoI4Xqd0q97bcdipeHONSSMmZUk3tDvDJLUOM/zlmFlJYENg1CAoIsfyMQKnRrnm7Xbm0XjnVH EYf1ontlBJJPlsUR8mX0ECLANgsl8lKi+uf6ecokMFuM63StnoZIrOdaBSvmcyVP37UlEqI2QgC vTA3TVG/wzElue170NDB6yZY9hfc8v+4h+Fk5OnGOK6rvMOBHKtnAxsWPn3ANPqzqGKPikSUReT tEkDwT2mkerQ7YluuZiJ4NcJGC2aGcgG3aw/X5/1BD5o X-Google-Smtp-Source: AGHT+IFzLp4UxAOXhR1w+7bk9AjQ9dY6f69C/9n9/xsAtdWM8nEWuYAej2Uv1ZNStxs+JuH4bdxqcw== X-Received: by 2002:a05:6a00:340c:b0:736:a8db:93b4 with SMTP id d2e1a72fcca58-7405890a9f3mr1874428b3a.2.1746155125203; Thu, 01 May 2025 20:05:25 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 05/11] tests/qtest/ahci: unmap pci bar before reusing device Date: Fri, 2 May 2025 13:04:39 +1000 Message-ID: <20250502030446.88310-6-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::436; envelope-from=npiggin@gmail.com; helo=mail-pf1-x436.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155295569124100 Content-Type: text/plain; charset="utf-8" ahci-test double-maps the hba bar in the pending_callback test. Unmap it first, to keep iomaps balanced. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Cc: Akihiko Odaki Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/ahci.h | 2 ++ tests/qtest/ahci-test.c | 4 ++++ tests/qtest/libqos/ahci.c | 11 +++++++++++ 3 files changed, 17 insertions(+) diff --git a/tests/qtest/libqos/ahci.h b/tests/qtest/libqos/ahci.h index a0487a1557d..f610bd32a5f 100644 --- a/tests/qtest/libqos/ahci.h +++ b/tests/qtest/libqos/ahci.h @@ -574,7 +574,9 @@ void ahci_clean_mem(AHCIQState *ahci); QPCIDevice *get_ahci_device(QTestState *qts, uint32_t *fingerprint); void free_ahci_device(QPCIDevice *dev); void ahci_pci_enable(AHCIQState *ahci); +void ahci_pci_disable(AHCIQState *ahci); void start_ahci_device(AHCIQState *ahci); +void stop_ahci_device(AHCIQState *ahci); void ahci_hba_enable(AHCIQState *ahci); =20 /* Port Management */ diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index e8aabfc13f5..36caa7b2999 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -198,6 +198,7 @@ static void ahci_shutdown(AHCIQState *ahci) { QOSState *qs =3D ahci->parent; =20 + ahci_pci_disable(ahci); ahci_clean_mem(ahci); free_ahci_device(ahci->dev); g_free(ahci); @@ -1418,6 +1419,7 @@ static void test_reset(void) CMD_READ_DMA_EXT, CMD_WRITE_DMA_EXT); ahci_set(ahci, AHCI_GHC, AHCI_GHC_HR); + stop_ahci_device(ahci); ahci_clean_mem(ahci); } =20 @@ -1484,6 +1486,7 @@ static void test_reset_pending_callback(void) sleep(1); =20 /* Start again. */ + stop_ahci_device(ahci); ahci_clean_mem(ahci); ahci_pci_enable(ahci); ahci_hba_enable(ahci); @@ -1502,6 +1505,7 @@ static void test_reset_pending_callback(void) ahci_free(ahci, ptr1); ahci_free(ahci, ptr2); =20 + stop_ahci_device(ahci); ahci_clean_mem(ahci); =20 ahci_shutdown(ahci); diff --git a/tests/qtest/libqos/ahci.c b/tests/qtest/libqos/ahci.c index 34a75b7f43b..bd1994a9208 100644 --- a/tests/qtest/libqos/ahci.c +++ b/tests/qtest/libqos/ahci.c @@ -205,6 +205,11 @@ void ahci_pci_enable(AHCIQState *ahci) =20 } =20 +void ahci_pci_disable(AHCIQState *ahci) +{ + stop_ahci_device(ahci); +} + /** * Map BAR5/ABAR, and engage the PCI device. */ @@ -217,6 +222,12 @@ void start_ahci_device(AHCIQState *ahci) qpci_device_enable(ahci->dev); } =20 +void stop_ahci_device(AHCIQState *ahci) +{ + /* Unmap AHCI's ABAR */ + qpci_iounmap(ahci->dev, ahci->hba_bar); +} + /** * Test and initialize the AHCI's HBA memory areas. * Initialize and start any ports with devices attached. --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155230; cv=none; d=zohomail.com; s=zohoarc; b=i260JN+CjxPAlZy9FTekQmMzX3k3GynWAzNDhCvu5vlz2on1PziRHAK7y3oaE+jp3LgND0ledaRL3W9txKZbObOZjaURB8MXY+1Mo6V7CzGym+gAryaHBx6ApXOr5pwTJY0cYHeHRv38dXXYSgS6iuBaEX19I6N/mQaC87BkkW4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155230; h=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=85Zd/mblli+U4+pxVxRHC9U0CP9i94iwyTWbD8xhhJE=; b=Qha5piI48dDnTNASFSOmx2ZdiQHa3WK8xAmdvmjsynA9odIwn08G7bqFEPtpx75yikcRhnTD4yihMca0Sfaa30YGAWF9Di9LuFTC/qLslQPhcap5S8OiVakc87mkmII+DYne0cIosDrozyC9YMQWUAm9lf/NWhltsfy5F2RUDe8= 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 1746155230358462.988530265192; Thu, 1 May 2025 20:07:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiZ-0001gV-7W; Thu, 01 May 2025 23:05:39 -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 1uAgiW-0001dW-7e; Thu, 01 May 2025 23:05:36 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgiU-0000IQ-8B; Thu, 01 May 2025 23:05:35 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-73bf5aa95e7so1548234b3a.1; Thu, 01 May 2025 20:05:32 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155131; x=1746759931; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=85Zd/mblli+U4+pxVxRHC9U0CP9i94iwyTWbD8xhhJE=; b=S1VaRkMHoiTYcHaAMl7tq4kDBpo72N+2LGrBH8ALyq/7NbTOduUNdrsEwx/HIaktHs GpobCbaw9qkoEo4UYgV+idgowUKBwIOiPN9pcir0g714PefX54p7sKmO/sjBpW5kTNug +fLvAuk8CuEPFKxI/uoJnE6eGeU+E2LofpjBxVNEwcD9uwzU7FCYvbdK8iIR1JO2eQQ/ zIE39gjkt4ms+jeV3Ss6Hz1BSbPYsEvVJLkSQv9CEEUa7BdJ3f26bLW592WhVGFnIyo7 +pg873HMfEJzvSs2RoMHI/YeUD/eddDjeXjY7IaALRyypSmivonFDxaJ5kXByGHs6Hqh vGTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155131; x=1746759931; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=85Zd/mblli+U4+pxVxRHC9U0CP9i94iwyTWbD8xhhJE=; b=DKsMke1WDiBq0RWrvDYNfbgtr6DEveBYPWYLQDC6NU0L0iUND/Wz1vpjtyJIms8frt Wm1fEQCgZ0Lg8vjPt0oSUdT6RDtMDkZkeWbfR7sobg1jMxUePnxJwUA78YMxRQOd0UGc R0bWXFsfNJxS1gteVMhDb6RYT3Gl2yyHvJRNiy0OGXiT9z9PD/yI+i+EubzN7tpXvigZ bOanWRoBuiViw2r8XLuDIuw6XHlCrgpk9kUQtTiwfuqcAnmDQQ+AylAgKUtCL0GMCrqY USqVk1mgUzTJeGNP3EoHsQGPPjVi2vNW9E9r+gl4dgcTjYEwqU/T4czH5J3NmjoIhxKt E8pw== X-Forwarded-Encrypted: i=1; AJvYcCWqbZRnseOtMoa5uxyVW3TLOAjTIyxLUs85gTCyS7eB158WzOEcOoh0iWUQU4rUamh1WMQrdCwVfV0=@nongnu.org, AJvYcCWxVkgE7RNzn5BXj1t03rEJNbFYjYaZzhB+T81NymL38lp1wEoKHdhR3erwXRNQ33EvV6/QmDmDzNvM@nongnu.org X-Gm-Message-State: AOJu0Yx/Uza5E6/XiOj5WrAnqcNDmZokMwwC1Uvu2SbUEa/FoEmpCtpR Ky4NY+ODtrGe6mUZaVf8X6DYM/hRUxow0hIAuCEWYMVkQ7ioSAjk9+vh/w== X-Gm-Gg: ASbGnctnwxKaVg5yITlJuusYQclITLdhcuH01qfoCv86Qao4NB7MAWwOCCLI7fmKMRR bem3+ttGVe5rXTMzB0dqafD0gNoNTr7JjHauST5BT5siA6tdcVQi0MhW9v2+da5GVB/WW0Y01ZB L+JP+gVQcFN6Dtdi3e1P77ZX+L0QqG9aQwIAe82/vVZ3adz3QriNtl7TGGy8x+yo6VFQm9M08o+ 3/J2WUAYlatQkVUxDeNkvNyJDlHounnZhDRfE+WxAR4vS+B0yoej3eGs9L0/nzu4onRFGO2fOPv TQiDtgAgJ/25zgGgPzzY9KY8dTUVcVta8MeRrOjrt88l X-Google-Smtp-Source: AGHT+IFDPgoxxd6icukls0pekzD9vKVU1eoFBB/twmC5W4IupRQY0l8uU/edV+aA+u0tnxwLwHOu6g== X-Received: by 2002:a05:6a00:2791:b0:736:b9f5:47c6 with SMTP id d2e1a72fcca58-74058b11d08mr1883470b3a.16.1746155131199; Thu, 01 May 2025 20:05:31 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 06/11] tests/qtest/ahci: don't unmap pci bar if it wasn't mapped Date: Fri, 2 May 2025 13:04:40 +1000 Message-ID: <20250502030446.88310-7-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::42b; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42b.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155230959124100 Content-Type: text/plain; charset="utf-8" ahci-test has a bunch of tests where the pci bar was not mapped. Avoid unmapping it in these cases, to keep iomaps balanced. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Cc: Akihiko Odaki Cc: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/ahci.h | 1 + tests/qtest/ahci-test.c | 7 ++++++- tests/qtest/libqos/ahci.c | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/qtest/libqos/ahci.h b/tests/qtest/libqos/ahci.h index f610bd32a5f..d639692aac4 100644 --- a/tests/qtest/libqos/ahci.h +++ b/tests/qtest/libqos/ahci.h @@ -342,6 +342,7 @@ typedef struct AHCIQState { uint32_t cap; uint32_t cap2; AHCIPortQState port[32]; + bool pci_enabled; bool enabled; } AHCIQState; =20 diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 36caa7b2999..7d5f73ac40b 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -85,6 +85,8 @@ static void verify_state(AHCIQState *ahci, uint64_t hba_o= ld) uint64_t hba_base; AHCICommandHeader cmd; =20 + g_assert_cmphex(ahci->hba_bar.addr, =3D=3D, hba_old); + ahci_fingerprint =3D qpci_config_readl(ahci->dev, PCI_VENDOR_ID); g_assert_cmphex(ahci_fingerprint, =3D=3D, ahci->fingerprint); =20 @@ -198,7 +200,9 @@ static void ahci_shutdown(AHCIQState *ahci) { QOSState *qs =3D ahci->parent; =20 - ahci_pci_disable(ahci); + if (ahci->pci_enabled) { + ahci_pci_disable(ahci); + } ahci_clean_mem(ahci); free_ahci_device(ahci->dev); g_free(ahci); @@ -1421,6 +1425,7 @@ static void test_reset(void) ahci_set(ahci, AHCI_GHC, AHCI_GHC_HR); stop_ahci_device(ahci); ahci_clean_mem(ahci); + start_ahci_device(ahci); } =20 ahci_shutdown(ahci); diff --git a/tests/qtest/libqos/ahci.c b/tests/qtest/libqos/ahci.c index bd1994a9208..cc4f5b7b534 100644 --- a/tests/qtest/libqos/ahci.c +++ b/tests/qtest/libqos/ahci.c @@ -215,17 +215,25 @@ void ahci_pci_disable(AHCIQState *ahci) */ void start_ahci_device(AHCIQState *ahci) { + g_assert(!ahci->pci_enabled); + /* Map AHCI's ABAR (BAR5) */ ahci->hba_bar =3D qpci_iomap(ahci->dev, 5, &ahci->barsize); =20 /* turns on pci.cmd.iose, pci.cmd.mse and pci.cmd.bme */ qpci_device_enable(ahci->dev); + + ahci->pci_enabled =3D true; } =20 void stop_ahci_device(AHCIQState *ahci) { + g_assert(ahci->pci_enabled); + /* Unmap AHCI's ABAR */ qpci_iounmap(ahci->dev, ahci->hba_bar); + + ahci->pci_enabled =3D false; } =20 /** @@ -249,6 +257,7 @@ void ahci_hba_enable(AHCIQState *ahci) uint8_t num_cmd_slots; =20 g_assert(ahci !=3D NULL); + g_assert(ahci->pci_enabled); =20 /* Set GHC.AE to 1 */ ahci_set(ahci, AHCI_GHC, AHCI_GHC_AE); --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155255; cv=none; d=zohomail.com; s=zohoarc; b=VcYoZzgFZmt1b9vTGABngSls+iGo+Wddl6uoOYVYjgxxorzBy1yM657Mynq/NN8ERwh5qdLIlwqOZo54QduGig0jS5vikDgmck7uKLAR9/1ERKlODoSOfzwAW3WI4rITr8WUdssvnwrB9FLBU62S6JF0KH9Bu6k5+jKhTREhfMs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155255; h=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=g0EYcxOiAxlxt2yBBr4MMGs4l99XO3V8QvNESSUaMc8=; b=YLx65ZzWEqXLit6iDJvKhez6NZ4WmaUq1BT5JO/lcVA96ZiRYkeS8wlcFQlrxSKUHXkYl9wvv5UnEjunIzO5JbhCIDdywYbhHX2ny7BnqR6YOWsGQRqLQVIUMUTYKhvOPLhdkb6DuLRkgFVW9Xfb/qtLom1RHzgXXJZgK+KPdKE= 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 1746155255542356.62032037043446; Thu, 1 May 2025 20:07:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgie-0001mm-DT; Thu, 01 May 2025 23:05:44 -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 1uAgib-0001k3-OM; Thu, 01 May 2025 23:05:41 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgia-0000YX-37; Thu, 01 May 2025 23:05:41 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-736c062b1f5so1742424b3a.0; Thu, 01 May 2025 20:05:38 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155137; x=1746759937; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g0EYcxOiAxlxt2yBBr4MMGs4l99XO3V8QvNESSUaMc8=; b=flbaFetbI+PttL8Z2tCtjWhxHlYYTvem7DKQsmlVAxKtZi0Q3maYczznH7bFPmBWa6 hJxF1TuDJ1QeovMUOoSGjH+SMR6DLTuWjArtYA5oRsR8qjZOBKXYmy5lImMt5kIFfglv U0deCLnhF2lj7NR7RTXkrXAFCcKt6UBOcQxl2RD1jPTH61D1m0EMjDJiCREFNLx8E6aj aRSMgIPXJoyvMfGfnBOtqPlBz/+abTZAdQxk3Glc8Lm5GHDzZ5k1iHSoBPuH0ws6y1Fj q+Dy8B4Aw3nWLDvZmguEWEC/BJ0fnNbYYqd/DxKDK1ItpGg4VLiDNQ853l23Ka41ZaiA Z1Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155137; x=1746759937; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g0EYcxOiAxlxt2yBBr4MMGs4l99XO3V8QvNESSUaMc8=; b=Y/u9V7P/ZC06g/Mop2tiTpESFh7KVKK5UCGjTpPP+d3HP5fUSA8uJSM0bwxk14+weN YyWaQdZkew7j0AlL6efiGg5ozxZIfJFciX0fFYgRsVv1L144Z/ESHEEpy/H3p5K5v/ig f2LV10wuN2hV4imfajjUalPICn8RPCIcTy9CIoir6cB2HAuCnwWJBfSE43hiR2gT+a5o Z8bZnNSvRsiXXxdNobawdMt90rt9nDPEY8ig41pBkaf8wB41VZP8KO7/ozn6OPR0Bl2k 7SB8bRwmKbzornIDvMZgbBsAJIyIeRNZD6LgCUu65VEaOW+CD6bWVm41Ry5HrbHg2xuW FRNA== X-Forwarded-Encrypted: i=1; AJvYcCUOPZJmA7M8KLjp8ZQR2d3V5QlEvIDRn0+ZNSU6x6cuzE4iYAPKNxcYERyyOc7IKwiAX3B8q1j8Ti/g@nongnu.org, AJvYcCUk5NDUuD1khiqGy8se4A/oKm1Dsf1ihRRSFvyZeAqH3NXCvrHA4zKX3QdB6f1HQnMe2+N4xv1DRR4=@nongnu.org X-Gm-Message-State: AOJu0YxxHYlJojk9V83fEGwgvqda3iX8R+2NN4D6WXGNN6QEdwfd/DMq xkdFswlvjSh/5MBhKBYZRAoSm+2GuJRz7jXqhLDG3xOehZkTDlNZN6+IeA== X-Gm-Gg: ASbGncuZhwktzdAH7/Ndx0dO9tWnx0U2yKneFK8qZ+y2Opj4M03Y72eH7EL2NE4hZME KB7UtZ/iFW7zPDduUDvkBrrWjmPNGq9hi+LMkOkOtpcb+9IYhWQHsUstn0cLrYHV7twgP+IyuU9 RpNhZ/NPNP5aKHw6xJ/3sYSrDabxGajfKvA3X6oLZ1eSonZOqi3VpsYXS8xnSyGLSa8KzmZ+025 76dUTt/4iJj3KXiXWCNne3AJBYwOY8/kh01EqdfwHEcPWxGKOx1BfiVV7hMir+VZOh6JNy7L7nQ KDcLiJzO09nU3JE0r/CL+4r9OUividN5mYIsxVDAvi+S1gNHQ484WDY= X-Google-Smtp-Source: AGHT+IHVpQXZJ247v9KO26Hg2LMy+FuiscfkqBSjUemfvcCWZ9vQ5XVeE+7z6th8q2Yq/5OlypiEUw== X-Received: by 2002:a05:6a00:4403:b0:736:4ebd:e5a with SMTP id d2e1a72fcca58-74058b55e2bmr2085762b3a.20.1746155137285; Thu, 01 May 2025 20:05:37 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 07/11] tests/qtest/libquos/virtio: unmap pci bar when disabling device Date: Fri, 2 May 2025 13:04:41 +1000 Message-ID: <20250502030446.88310-8-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::429; envelope-from=npiggin@gmail.com; helo=mail-pf1-x429.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155257135124100 Content-Type: text/plain; charset="utf-8" Unmap the virtio-pci bar in qvirtio_pci_disable_device() to keep iomap/iounmap balanced. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/virtio-pci.h | 1 + tests/qtest/libqos/virtio-pci.c | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/qtest/libqos/virtio-pci.h b/tests/qtest/libqos/virtio-pc= i.h index f5115cacba2..efdf904b254 100644 --- a/tests/qtest/libqos/virtio-pci.h +++ b/tests/qtest/libqos/virtio-pci.h @@ -26,6 +26,7 @@ typedef struct QVirtioPCIDevice { uint64_t config_msix_addr; uint32_t config_msix_data; =20 + bool enabled; int bar_idx; =20 /* VIRTIO 1.0 */ diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pc= i.c index ea8114e2438..d6333a4d576 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -278,13 +278,22 @@ static const QVirtioPCIMSIXOps qvirtio_pci_msix_ops_l= egacy =3D { =20 void qvirtio_pci_device_enable(QVirtioPCIDevice *d) { + g_assert(!d->enabled); + d->enabled =3D true; qpci_device_enable(d->pdev); d->bar =3D qpci_iomap(d->pdev, d->bar_idx, NULL); } =20 void qvirtio_pci_device_disable(QVirtioPCIDevice *d) { - qpci_iounmap(d->pdev, d->bar); + /* + * Test for "enabled" device state because some paths can call + * qvirtio_pci_disable_device() on devices that have not been enabled. + */ + if (d->enabled) { + qpci_iounmap(d->pdev, d->bar); + d->enabled =3D false; + } } =20 void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci, --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155228; cv=none; d=zohomail.com; s=zohoarc; b=QEBYqiuSXSlWoVJwC6ljtM5FCDkT8HbknfVuVy03DzqqEy+DLUQeedseYXqVFA+1UCesX5Afxv1AkOsDrDKhiXn14RzuMGlrrKzsF3t41zL2ghp2SqyyJYS3wIDZ4Ct0+EDlMwjBfc/P/U/XJLZ4UAL9U8/3+yeAbsfXsLx6vsw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155228; h=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=UX5i98+VvwrNDRvu7y7o1k9t75ZW7RfEsAcL5qSuocY=; b=WfqUGSHSw+j7VzcW0NEwOaQL4d8YAC5Qz2h2GHW5LvfR+GGyj3cwQ7qn+wrmdwXfE8Nj6jgDwJnByF8BPgJ2GQf9BDeKGwRBXazDpmebOv8qxP2PwB/p8Nwp4CGuIcmzKXAXrOvPqirJx3krQabdWmkG1TlSAdOJVy2f9PgmBSk= 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 1746155228686187.0651509923348; Thu, 1 May 2025 20:07:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgik-0001vm-3Y; Thu, 01 May 2025 23:05:50 -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 1uAgih-0001oH-TP; Thu, 01 May 2025 23:05:47 -0400 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgig-0000bD-5q; Thu, 01 May 2025 23:05:47 -0400 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-736bfa487c3so1546114b3a.1; Thu, 01 May 2025 20:05:44 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155143; x=1746759943; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=UX5i98+VvwrNDRvu7y7o1k9t75ZW7RfEsAcL5qSuocY=; b=mNT57EkOWXPDGP54XBZTxOPRXeDqjsBa+vWbiyJTSriu25STx5zoNyBonDywMWqXzc gwrkejb3SjDyshcK4hhCvU/6KXEHXU1gQEpWP48afg8553YIfDWsI8Ps1QrL29Bv5/oQ BL73NkdIfvaVfdPqWnjD6Ewop9uunAx/Sj75mvhIfJLmND5GL8TvR/X+4P0kQjSrWeg1 MgCqTm6lyEWH82R8xvKQBq1nN9xF+o8cEaseulRAkKiEY/kA8DqErKbnRfmrrur2GXgD XGHFfSqt+DBtufjmYY7ZYN3D+dL8pIKhii0gMlPagh89d0+O956vGBOY6pUdl1nQHfIm zD3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155143; x=1746759943; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UX5i98+VvwrNDRvu7y7o1k9t75ZW7RfEsAcL5qSuocY=; b=hsp8+XQmRqwL2f3SV5rtowGIKOmsHenVHSVDywN2UqswZV0BxHNW9ihzenvTLcEzmq D9RaDLZ77zNUNAUpTou9iDI3qMD0hpdUDE8Rfy/EGk0CObDmVyrDOcVrMLkQBvvgI/FZ X9SvEDVe6JihWDM4WA3Bb8QuJ1XMXTr8WPgNqoQHV26dChQrjv4kgpEisYDDkPiI0Imx 53WAK1iBZUvMvL4YqRBBwMcIrJ7+4Dqd/2JQk92QHK5iCkFELecZlwcqDqsQ+/DjgKhF EsQst+YYBZWGunU8OfxXK+fcd5NReJ1bP0fl2SqObUM+uBjGGoy7LkHLb0J0UDqwTZZG Qotw== X-Forwarded-Encrypted: i=1; AJvYcCVCg7ZMJauuuBVPDFvFoiIyzpqhaJQMpdUkLDI1NtUlfsyd62jTb2rdbG+znYT9i40IntqFPadFphk=@nongnu.org, AJvYcCWhYGE3lKhBGFqSO+vfZAnxhRqjhOYYPgVAaoIxEIYFH+AuVSDN5FeGDv9hHpXRW05T0FS8kfp1mPQq@nongnu.org X-Gm-Message-State: AOJu0YzI2N9GkW2ZETYGyNQEPpgsvqP9zCZ6SjgyWhmCo5UF2MD5TtAe HybvxHitXFwm9MBP800LvVdLW9mAn5+aLfa1g7YuVhpT10L5PTDTf+KgLQ== X-Gm-Gg: ASbGnct5RBrR410SYCJm2QLaDwCdXcnV28VwFaSg5pNW+whYY/kW874EuhiSU7yyfq6 cz2P8IIBZsEC9WG3P8WoEaEnfPmZYC0XrS37N9DVlf5qapVma/u7DLtlFpREdO9lOTfjsxtrWOY virdQyUjDfE9YgKyLArBuH9yjlx758PMu74TpARpIZI1aWdE0n/c7Ae8Av17jlGgKQuajMeCspW M/sarle3SeWMRnk61L3xQ+0Lvhh2n79YxViGAvISD2I1SYVIfgUs4yOXOmsky0sRIUJLzCMM0Hj UPWwxpDDiN2zSjguR2Xvh7HXLcRnD+1DH0GtljochWKM X-Google-Smtp-Source: AGHT+IEI4dIB9PGkoRRBV+6vmuOdcAQsDQK7tNPsNhb0+PGdy/WsOyIVLLXRbC88m212g/sNugohUw== X-Received: by 2002:a05:6a00:6c93:b0:736:51ab:7aed with SMTP id d2e1a72fcca58-74058b0aab3mr1977937b3a.16.1746155143386; Thu, 01 May 2025 20:05:43 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 08/11] tests/qtest/libquos/pci: Add migration fixup helper for pci devices Date: Fri, 2 May 2025 13:04:42 +1000 Message-ID: <20250502030446.88310-9-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::42a; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42a.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155230788019100 Content-Type: text/plain; charset="utf-8" Migration tests can create new QPCI devices for the destination machine which may need to take on some state of the source machine after destination is complete. Add a migration fixup helper and call it from ahci migration tests. This is currently a noop and will be used subsequently. Reviewed-by: Akihiko Odaki Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 1 + tests/qtest/ahci-test.c | 1 + tests/qtest/libqos/pci.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index ef40a6917d3..19f1dd13501 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -120,6 +120,7 @@ void qpci_memwrite(QPCIDevice *bus, QPCIBar token, uint= 64_t off, const void *buf, size_t len); QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr); void qpci_iounmap(QPCIDevice *dev, QPCIBar addr); +void qpci_migrate_fixup(QPCIDevice *to, QPCIDevice *from); QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr); =20 void qpci_unplug_acpi_device_test(QTestState *qs, const char *id, uint8_t = slot); diff --git a/tests/qtest/ahci-test.c b/tests/qtest/ahci-test.c index 7d5f73ac40b..60eef9949db 100644 --- a/tests/qtest/ahci-test.c +++ b/tests/qtest/ahci-test.c @@ -137,6 +137,7 @@ static void ahci_migrate(AHCIQState *from, AHCIQState *= to, const char *uri) memcpy(to, from, sizeof(AHCIQState)); to->parent =3D tmp; to->dev =3D dev; + qpci_migrate_fixup(to->dev, from->dev); =20 tmp =3D from->parent; dev =3D from->dev; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index 2bae119bfca..de95329e486 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -620,6 +620,10 @@ QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t ad= dr) return bar; } =20 +void qpci_migrate_fixup(QPCIDevice *to, QPCIDevice *from) +{ +} + void add_qpci_address(QOSGraphEdgeOptions *opts, QPCIAddress *addr) { g_assert(addr); --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155287; cv=none; d=zohomail.com; s=zohoarc; b=Mc4VQKRFoL/5WDH1ZYqlDViaOpmxiSOmcsLH8ga9vyaTUN7VfG8UogJMDu9t4jg3oJQDZ/d3hRehWdYCrtwpZ7LT6uxkiY1xtJCP+aJLV+/r2GlnWL8b8Laf3dXklpsnfCgpRviIzwGB/0fvCCRlr+ihO2BBVY/yBS89Y+d2JMQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155287; h=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=8VLYjH2+L+2Qg1nSwJ1zvQjbci9GKYgTGLD6Z6MI90U=; b=abC9dGsVQwAKP5CYKjkfgPWnecHWFTzy0HHHH0SVj7yB+d6WpDGGK1njgTJdh2fEupCP6kGtGLtlM4KUxwx7p5CojE07dks3vcX2Ass2O5GgC0A5zKyI0Adgc147RXV/3EtyDXynJpbP4O5DCgzMomzt6i2fGmStopnR8QmNBKQ= 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 1746155287310490.13508483159956; Thu, 1 May 2025 20:08:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiq-00029B-LE; Thu, 01 May 2025 23:05:56 -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 1uAgin-000248-NO; Thu, 01 May 2025 23:05:53 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgil-0000co-Po; Thu, 01 May 2025 23:05:53 -0400 Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-7399a2dc13fso2400366b3a.2; Thu, 01 May 2025 20:05:50 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155149; x=1746759949; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8VLYjH2+L+2Qg1nSwJ1zvQjbci9GKYgTGLD6Z6MI90U=; b=it007pE05u3WT12duwIhLKVc2HIlacAy/3+j91hvfPolTl3zacZp9IFRb/IZiZWtqw JZ9jGAXzz+g5YnlOLHrIgAccRRhAbS1IUtL2H3daQOdZaO//XFmF7s/IzXkaTiY/ePdb Qr7OJYMzY7qXdDxThqrKlgGvlkzAUeeBp4WzztWc5Q87bsmp4QiI23qso5YpmbSzMwWG l7XodWrE4Rx4dlj+JNAjzJOnPF+WnnQ3yERBrVl2XeD33p+NC73NSVxwIwiZJqv9X3SX YyExc1VVO0OLcvCd8wzuShQnPn260pR5XqhnSfP/MwZVltE5pnb2A+pFemEG1xoJxFK0 pG/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155149; x=1746759949; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8VLYjH2+L+2Qg1nSwJ1zvQjbci9GKYgTGLD6Z6MI90U=; b=UK9TJtqF7LK1hp4dCxTXsnTAT8nz6QfM4juqroP6AcRBF5OGmobOVe+RZKJfPdlup4 OGRbt+VYUZFS9NzaUYL4i+wGtJcyFGKzRMUlk28p+DUYuJD6WEl4/XJUbzTEU/n7Erda FZ3G1MgRItYMW+QB06tAF8UffYsrF5ZwLp8MTYNGBAzuQ3/NOK+KvgqvXPTA1e27VC4Q T3L+OGsB00Dk/Zxl+GXsiB9UUl6k+UV6hiNCq2pVGNEn5YTtt3zWJpEqgUZW7WVG/uF/ 5GUIjzeuNaCAk8F5IBmkFl8bGocPvt6Per6A1qzl1kO1a7kN8V82OAxZlR81rvrtz6E0 4neg== X-Forwarded-Encrypted: i=1; AJvYcCVeImx/dEZia8hGMEEjWWt/TdECkDAb14NWOOjjxzcBPVJJFBEgr7Kl3GXqnE1rGcu/2mn0hKxSPKWh@nongnu.org, AJvYcCWnIwg5yXI1Guxc9ZvICLV3dfD6GM10q1l+suqiwV8qEjj/eP7Vb1HZfjU2/1kRL8BAc9DawJZA1Ho=@nongnu.org X-Gm-Message-State: AOJu0YytXuQ2EK8CUr0RW+Q/z1MsNjvPhTMmcZMPZBQ9dIKc9yBmXR6D P6uz5ePxpX2Dd/wG2kyMiydhb9zZAfQJoujpXPJQSidUAx7O0p0HeD7+Eg== X-Gm-Gg: ASbGncsZ2zhca+pPgstqs486UrGhSZLOchXeOTf0Ya5gLcFV/CMfpsx+obthX48WGwj greXc8+prE3w5DjAe6hzfaXJIHnoipPU3F2FMzEf6OeoAOYODgNniwWSvP8KEnG9JountbFI2r+ fTL7Ww8hB14k1c2xPwrFSe0wyBz/ndy9MEvA/mZMaI+MS1rZY/oiyaZx+H0So1gLxmXqkFowHJb GdDQiVZJSn9lHQc/vfQLAfZEhwd9o6pJ3XruD64JOyipKvHfXvPqTE3dy/HD0k+cBFxx/O8/d7T gT+P5/52u6tAiK9Yrj41K9ak3+D/LBLX60RYZ0Bkb/Y6 X-Google-Smtp-Source: AGHT+IE61ncXhT0vFkJuSeNbhL9AtY79R1JopNpnSsYkTnhyHOB2Oc2Om5w3FQdfKUUG6tjovDsUlg== X-Received: by 2002:a05:6a00:1bc6:b0:736:46b4:bef2 with SMTP id d2e1a72fcca58-74058a20a33mr1678534b3a.6.1746155149308; Thu, 01 May 2025 20:05:49 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 09/11] qtest/libqos/pci: Enforce balanced iomap/unmap Date: Fri, 2 May 2025 13:04:43 +1000 Message-ID: <20250502030446.88310-10-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::434; envelope-from=npiggin@gmail.com; helo=mail-pf1-x434.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155289522124100 Content-Type: text/plain; charset="utf-8" Add assertions to ensure a BAR is not mapped twice, and that only previously mapped BARs are unmapped. This can help catch bugs and fragile coding. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 9 +++++++ tests/qtest/libqos/pci.c | 51 ++++++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index 19f1dd13501..a51bf60620f 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -60,10 +60,19 @@ struct QPCIBar { bool is_io; }; =20 +/* + * hw/pci permits 7 (PCI_NUM_REGIONS) regions, the last for PCI_ROM_SLOT. + * libqos does not implement PCI_ROM_SLOT at the moment, and as such it + * permits 6. + */ +#define QPCI_NUM_REGIONS 6 + struct QPCIDevice { QPCIBus *bus; int devfn; + bool bars_mapped[QPCI_NUM_REGIONS]; + QPCIBar bars[QPCI_NUM_REGIONS]; bool msix_enabled; QPCIBar msix_table_bar, msix_pba_bar; uint64_t msix_table_off, msix_pba_off; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index de95329e486..694f1458f46 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -79,12 +79,17 @@ QPCIDevice *qpci_device_find(QPCIBus *bus, int devfn) void qpci_device_init(QPCIDevice *dev, QPCIBus *bus, QPCIAddress *addr) { uint16_t vendor_id, device_id; + int i; =20 qpci_device_set(dev, bus, addr->devfn); vendor_id =3D qpci_config_readw(dev, PCI_VENDOR_ID); device_id =3D qpci_config_readw(dev, PCI_DEVICE_ID); g_assert(!addr->vendor_id || vendor_id =3D=3D addr->vendor_id); g_assert(!addr->device_id || device_id =3D=3D addr->device_id); + + for (i =3D 0; i < QPCI_NUM_REGIONS; i++) { + g_assert(!dev->bars_mapped[i]); + } } =20 static uint8_t qpci_find_resource_reserve_capability(QPCIDevice *dev) @@ -549,21 +554,31 @@ void qpci_memwrite(QPCIDevice *dev, QPCIBar token, ui= nt64_t off, dev->bus->memwrite(dev->bus, token.addr + off, buf, len); } =20 -QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr) +static uint8_t qpci_bar_reg(int barno) { - QPCIBus *bus =3D dev->bus; static const int bar_reg_map[] =3D { PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_1, PCI_BASE_ADDRESS_2, PCI_BASE_ADDRESS_3, PCI_BASE_ADDRESS_4, PCI_BASE_ADDRESS_5, }; + + g_assert(barno >=3D 0 && barno <=3D QPCI_NUM_REGIONS); + + return bar_reg_map[barno]; +} + +QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr) +{ + QPCIBus *bus =3D dev->bus; QPCIBar bar; int bar_reg; uint32_t addr, size; uint32_t io_type; uint64_t loc; =20 - g_assert(barno >=3D 0 && barno <=3D 5); - bar_reg =3D bar_reg_map[barno]; + g_assert(barno >=3D 0 && barno <=3D QPCI_NUM_REGIONS); + g_assert(!dev->bars_mapped[barno]); + + bar_reg =3D qpci_bar_reg(barno); =20 qpci_config_writel(dev, bar_reg, 0xFFFFFFFF); addr =3D qpci_config_readl(dev, bar_reg); @@ -606,12 +621,34 @@ QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64= _t *sizeptr) } =20 bar.addr =3D loc; + + dev->bars_mapped[barno] =3D true; + dev->bars[barno] =3D bar; + return bar; } =20 void qpci_iounmap(QPCIDevice *dev, QPCIBar bar) { - /* FIXME */ + int bar_reg; + int i; + + g_assert(bar.addr); + + for (i =3D 0; i < QPCI_NUM_REGIONS; i++) { + if (!dev->bars_mapped[i]) { + continue; + } + if (dev->bars[i].addr =3D=3D bar.addr) { + dev->bars_mapped[i] =3D false; + memset(&dev->bars_mapped[i], 0, sizeof(dev->bars_mapped[i])); + bar_reg =3D qpci_bar_reg(i); + qpci_config_writel(dev, bar_reg, 0xFFFFFFFF); + /* FIXME: the address space is leaked */ + return; + } + } + g_assert_not_reached(); /* device was not iomap()ed */ } =20 QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr) @@ -622,6 +659,10 @@ QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t ad= dr) =20 void qpci_migrate_fixup(QPCIDevice *to, QPCIDevice *from) { + memcpy(to->bars_mapped, from->bars_mapped, sizeof(from->bars_mapped)); + memset(from->bars_mapped, 0, sizeof(from->bars_mapped)); + memcpy(to->bars, from->bars, sizeof(from->bars)); + memset(from->bars, 0, sizeof(from->bars)); } =20 void add_qpci_address(QOSGraphEdgeOptions *opts, QPCIAddress *addr) --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155214; cv=none; d=zohomail.com; s=zohoarc; b=YyplqsbdSEpsBNzjZswCe0YR4jDCe3c6JV53fDj9JYv4fZh8L0XYvHKyl70+rrfRaf4L1arWMS9UqctZqGPpsjETtyw7zRNAewgxvwJ28utNFueGaEImlkvWHnOpNyDcVaaXoVOA6D8UoQOujyrU7pRyzBNR4UMi3opZsQo4vLg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155214; h=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=rbWiZk9FIuTQk1R1l7yjGMAZNpLJl/v15pcW+S5JT5Q=; b=hGTPqs4TP+QuzbYltENZz7n569VBnB05tb429bRgIg8F+SbwwKXIdhLahdfYXYv93b1ZzdEOV+JDqYa+9YH2jqPsDlhLs2qz3Qz8So5OYtvzM61C/DwqMJl57FJjcil0oSevEllCVUWgSGeSQ2inrEqU2j6m0E92/6vS/n46vac= 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 1746155213995342.6809827728332; Thu, 1 May 2025 20:06:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgiv-0002HV-1a; Thu, 01 May 2025 23:06:01 -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 1uAgit-0002Fo-Gq; Thu, 01 May 2025 23:05:59 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgir-0000mA-OA; Thu, 01 May 2025 23:05:59 -0400 Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-73c17c770a7so2376638b3a.2; Thu, 01 May 2025 20:05:56 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:05:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155155; x=1746759955; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rbWiZk9FIuTQk1R1l7yjGMAZNpLJl/v15pcW+S5JT5Q=; b=D7KdES1SV5TQoe4833/Slu/C6paTJmHrRRxXjcnMgOgBM37UzsCIM4+7jMXxWIntYv TkV1UFPyNGBlWvPkH2nVwkH3boicUTzzQu0Gj/NJgFSpWojoT5oGc08Sg1k6nZBu7pzP y7l4KKFyATniBM8dP81APZ5tP9m92aQITn0R7I0NaxOr8DeVQ9jZ1fc5JW9JIUiO88dd 1sxyu0BjgoQDmJSNPbUJf9bVGK1vRVrazubEAYKaYhCz8EkYzJf1RcP9w3ofik8uDK3F EBoWS7aHXzXFfZzex0qYRmFalxwBKnE9lqBzpB1MNZH+7ytS55wsEbBTTN/pf9d15liC noxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155155; x=1746759955; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rbWiZk9FIuTQk1R1l7yjGMAZNpLJl/v15pcW+S5JT5Q=; b=RN6Xqjk/QcHgLlQvQfM9IhWh53AUlyxa3LSdx5fUWqY3jv4o3WZPqdRjzmhuDxExTn ddFTjZncLkqes488kdPAychpMdvno6yQv3k6/aE/xOcrHLvGosjiu5uymdwTZk883NIu VMGcPQWGHTw6Yrct/X7cbTfB5thPyM+BlnBMAoKh78Ax1r3VbJoxaMOPghi/HrT2VRzw UG5x2p9tVowST+mLhFoSDIm2W+2Wz+av35ZVnwaBwUszzzh8LL4hYZfqpfXBTV4rfHJ/ sGDJo/jHOIrv4V929z97Go4MErHajtqeMX6vnOl1pHK5+gMvz7LubY6Jd7Gt3GjmpdWh LiQQ== X-Forwarded-Encrypted: i=1; AJvYcCU4xnDJSJaiGMQgOWtwX8gMwyvsaBktxViccEQEwfVegcXlyovbIuZNPSqWzseOtcDXe2dbb+Wfb8NG@nongnu.org, AJvYcCXZZJ3jXhi/KnDF3m3Bkf0AOMRZqK2o0jWwGX8zFDDNOm0Qff0vQj1wsSevmQaDvjCGhDphyN9hhjU=@nongnu.org X-Gm-Message-State: AOJu0YyrnHOk1QoRc71evlpuwOQeLqWAQUEqmspleK+RDzZrEd/gkkgu Sw04WhB2K6QNGxcjkiEkkzs3VbUKOFjizS6m420+sd1Ax7qqdTe4/gwV5w== X-Gm-Gg: ASbGncsbneI6E6lQlOPgzDquCGlrA9ehBpbUfyagKgoHZBOQ7XeIKDVI1juXgUQJtTl gREqKYkfl/j0ul4KcZoqU00SS3tyk9kBSFv1oHHcvkqMBmxBs1iM2ITnC9GRMe2muEQzuTghYLU lSbnADm/Bj04VxwDF0wj32W8KIUUfuQWtYtfEtDR/qxn7+tuEEJklDSHhqHVJoSM56ajqsmWKO0 0BPhLV1G3u/Qelt8VuwRyoOoQCgHeAKIZVNTimYlKVGaVLWNPCM5OCuoKUnOWJOY9yjX4oR4Ami JzwV8Co+PAmxU41grXCYGbvRRa9EhPzmrLeJ83D0ZxXDhVXAWunpj8c= X-Google-Smtp-Source: AGHT+IEAIMZrsKspe0rfYw8VBj6Q0CSBkdZtaWfOdr9njWtGSnLTMAaJKA7qd7+jMFpKbKZihFi2BQ== X-Received: by 2002:a05:6a20:d50a:b0:1f5:8d91:293a with SMTP id adf61e73a8af0-20ce03ee7bemr2173969637.41.1746155155059; Thu, 01 May 2025 20:05:55 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 10/11] qtest/libqos/pci: Fix qpci_msix_enable sharing bar0 Date: Fri, 2 May 2025 13:04:44 +1000 Message-ID: <20250502030446.88310-11-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::429; envelope-from=npiggin@gmail.com; helo=mail-pf1-x429.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155214838124100 Content-Type: text/plain; charset="utf-8" Devices where the MSI-X addresses are shared with other MMIO on BAR0 can not use msi_enable because it unmaps and remaps BAR0, which interferes with device MMIO mappings. xhci-nec is one such device we would like to test with msix. Use the BAR iomap tracking structure introduced in the previous change to have qpci_misx_enable() use existing iomaps if msix bars are already mapped. Cc: Michael S. Tsirkin Cc: Marcel Apfelbaum Reviewed-by: Akihiko Odaki Reviewed-by: Fabiano Rosas Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 1 + tests/qtest/libqos/pci.c | 40 ++++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index a51bf60620f..852d4a85f6f 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -74,6 +74,7 @@ struct QPCIDevice bool bars_mapped[QPCI_NUM_REGIONS]; QPCIBar bars[QPCI_NUM_REGIONS]; bool msix_enabled; + bool msix_table_bar_iomap, msix_pba_bar_iomap; QPCIBar msix_table_bar, msix_pba_bar; uint64_t msix_table_off, msix_pba_off; }; diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index 694f1458f46..cc83dcc163a 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -274,15 +274,21 @@ void qpci_msix_enable(QPCIDevice *dev) =20 table =3D qpci_config_readl(dev, addr + PCI_MSIX_TABLE); bir_table =3D table & PCI_MSIX_FLAGS_BIRMASK; - dev->msix_table_bar =3D qpci_iomap(dev, bir_table, NULL); + if (dev->bars_mapped[bir_table]) { + dev->msix_table_bar =3D dev->bars[bir_table]; + } else { + dev->msix_table_bar_iomap =3D true; + dev->msix_table_bar =3D qpci_iomap(dev, bir_table, NULL); + } dev->msix_table_off =3D table & ~PCI_MSIX_FLAGS_BIRMASK; =20 table =3D qpci_config_readl(dev, addr + PCI_MSIX_PBA); bir_pba =3D table & PCI_MSIX_FLAGS_BIRMASK; - if (bir_pba !=3D bir_table) { - dev->msix_pba_bar =3D qpci_iomap(dev, bir_pba, NULL); + if (dev->bars_mapped[bir_pba]) { + dev->msix_pba_bar =3D dev->bars[bir_pba]; } else { - dev->msix_pba_bar =3D dev->msix_table_bar; + dev->msix_pba_bar_iomap =3D true; + dev->msix_pba_bar =3D qpci_iomap(dev, bir_pba, NULL); } dev->msix_pba_off =3D table & ~PCI_MSIX_FLAGS_BIRMASK; =20 @@ -293,6 +299,7 @@ void qpci_msix_disable(QPCIDevice *dev) { uint8_t addr; uint16_t val; + uint32_t table; =20 g_assert(dev->msix_enabled); addr =3D qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); @@ -301,10 +308,31 @@ void qpci_msix_disable(QPCIDevice *dev) qpci_config_writew(dev, addr + PCI_MSIX_FLAGS, val & ~PCI_MSIX_FLAGS_ENAB= LE); =20 - if (dev->msix_pba_bar.addr !=3D dev->msix_table_bar.addr) { + if (dev->msix_pba_bar_iomap) { + dev->msix_pba_bar_iomap =3D false; qpci_iounmap(dev, dev->msix_pba_bar); + } else { + /* + * If we had reused an existing iomap, ensure it is still mapped + * otherwise it would be a bug if it were unmapped before msix is + * disabled. A refcounting iomap implementation could avoid this + * issue entirely, but let's wait until that's needed. + */ + uint8_t bir_pba; + table =3D qpci_config_readl(dev, addr + PCI_MSIX_PBA); + bir_pba =3D table & PCI_MSIX_FLAGS_BIRMASK; + g_assert(dev->bars_mapped[bir_pba]); + } + + if (dev->msix_table_bar_iomap) { + dev->msix_table_bar_iomap =3D false; + qpci_iounmap(dev, dev->msix_table_bar); + } else { + uint8_t bir_table; + table =3D qpci_config_readl(dev, addr + PCI_MSIX_TABLE); + bir_table =3D table & PCI_MSIX_FLAGS_BIRMASK; + g_assert(dev->bars_mapped[bir_table]); } - qpci_iounmap(dev, dev->msix_table_bar); =20 dev->msix_enabled =3D 0; dev->msix_table_off =3D 0; --=20 2.47.1 From nobody Sat Nov 15 22:23:04 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=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1746155264; cv=none; d=zohomail.com; s=zohoarc; b=O2uOoEMm/zzFrR9MMYuHFNl687a3E+HLahiD9uWjfPGB2E2klXAzlz/A65Yft3Tyz2bSH8wM8MonrOoKJfRjUEXI9NNGJZY7oyo+OoCpZbkWB/PGky2Swhzu1oF5htkZJkYAoO9gI07l2rfhZnXWDpxsPEZ1Vitv3C8bx+hC8yE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1746155264; h=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=RLBXVJOKqFw9SMHdJeArw8ZHGpPwbggoVTwrSmHP6lQ=; b=OoveYr00fVphBtJsM1ZVHgnb135RFH4KoEhKJgdZlaDuVzLjITq2dOufD0hRFz33fkHbB6RoSI0DwyFrETRp0OBl5Rspr/H8kN2El6P8DLzkBNfRdkvJSv+aAVO/Jo1Js+8hJGF6jPCRa7Zfnwsf/JpRXYSQw6TnKRUMAkW7b74= 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 1746155264382107.76294118284181; Thu, 1 May 2025 20:07:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uAgj1-0002O2-Dg; Thu, 01 May 2025 23:06:07 -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 1uAgiz-0002Mj-BL; Thu, 01 May 2025 23:06:05 -0400 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uAgix-0000nj-8c; Thu, 01 May 2025 23:06:05 -0400 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-736c3e7b390so1873003b3a.2; Thu, 01 May 2025 20:06:01 -0700 (PDT) Received: from wheely.local0.net ([220.253.99.94]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-74059020932sm463382b3a.92.2025.05.01.20.05.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 May 2025 20:06:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746155161; x=1746759961; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RLBXVJOKqFw9SMHdJeArw8ZHGpPwbggoVTwrSmHP6lQ=; b=YrnjdQESXmV5rFlV6lU4irNQYWvRoT1jCDtKXuEgGxHhiT0uMktHPCReNjz3CH6ftN OIerPZkuXrehIT3liEwuNOkAn4bo4ptNHVbbXTo4WlWTebmPQ/nrgINW9ONwJpYH4Cs4 gITpBSlVI2Q38Dakxtq2kzYQAo71qUhQ495ncO58SkJBwuCyRxv1r1wn5ukgNEczlTaH nNB3jBtZNBKVi9tq1aylii82sVcg6xpCKF9aXlsRtOcbh5UNSPbuYF8vsDuS+6oAq5a7 CXgJ8RrzZnHF0Xg6AbXmb5NXUh+/JtNGgfAtHuW18q6el6tyalBGEeGGmPBMmxoc5Ghc K7Kw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746155161; x=1746759961; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RLBXVJOKqFw9SMHdJeArw8ZHGpPwbggoVTwrSmHP6lQ=; b=ZjRo/Ckza984ng2R7OdlMeGfj42bhDBwOSjnTj8iqklvvoidrEdniTeULdTkz7cHw4 2arZbAV1iVe+AeSEedKS4oLMJTnJMXhOF87JHHTn3ruwJjBQvI6Pi1JoF2W9KC1s6GvC CCOPaQVnynHbYJwOJE+/ZyPHeONl59bE7CsKNreJZntgFuG8PB5zNxzOC7Qy/yTG9Ux6 VyhiubwkFvbuG01RyrrlMxmmBM6iVEP+Y0ruU16/lkCxOhU8w+alP3IeF+lPhK+IBcsz zFhCIz2lfdHJdtoIWgTnyHE1Sb/k2L4betSArQnZ+25RVyKCUsHlSUHEgBZW4nc+2Fb9 NLpg== X-Forwarded-Encrypted: i=1; AJvYcCV1wZqdxvSE+ZQqs6pw+asSLxZ0mFNw2C0FwfztArVZdIBv9yB1ibh/ywRROcn9ceSrM2RJx9ZNvLWh@nongnu.org, AJvYcCWhSl6IVSZdswWIJUej/ODmHUhvtz98U0xTaWMNlYjgVBEP4irsw6eyAwqorJCMVkzFnVfMlih7Yl0=@nongnu.org X-Gm-Message-State: AOJu0YxfrCLpx8oTXXH/ZFc25La05z7bCcF1vuxGBjv0qEkzGjXVccyG lO9DTOZ5nHaM9cJ3lSKuZQ9tyrh9ZNVt1Yc3ycDgHQS+WVWxKaMF8p6i7w== X-Gm-Gg: ASbGnct2utG/bjyhM5mtkqUn4YaFt5GwMDgsxvwlWVS8kUA/+tOb+ta1NccvZhp78WZ BRXocuY7CB2bEiGc2iv2C7qAJBXL5A1x66NYnvZTQnOJiCMH2a0tMUTygv22KxF18+ZtkBFsjBy jS894e244622gTIMCotfVkYpQxct034fztiE9ffgOt5cfkIsbNTbE6p7q4bg7+6/6za58aNYxXm aJN2k0O/htk+GXyEONO5f+VSXhYXy/vRfezZAS2slo336VaV+tMFsr5CII6i4g++BsfHlvEXWcx 3ds7b71c0OGzKQj1vUyt+RHjainRi9RFpUzQJjaP1465 X-Google-Smtp-Source: AGHT+IEspwl9jq1Xr5NstoYF65ZfKZ9VVlI8qW6ZEJYj0L5GOxeDpNxCPz0zznJ4zKJJQ5GeCya6YA== X-Received: by 2002:a05:6a20:cfa7:b0:1f5:839e:ecdd with SMTP id adf61e73a8af0-20cde46b948mr1806850637.9.1746155160816; Thu, 01 May 2025 20:06:00 -0700 (PDT) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , Akihiko Odaki , Fabiano Rosas , Harsh Prateek Bora , John Snow , Laurent Vivier , Paolo Bonzini , "Michael S . Tsirkin" , Marcel Apfelbaum , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , qemu-block@nongnu.org, qemu-ppc@nongnu.org Subject: [PATCH v5 11/11] qtest/libqos/pci: Factor msix entry helpers into pci common code Date: Fri, 2 May 2025 13:04:45 +1000 Message-ID: <20250502030446.88310-12-npiggin@gmail.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250502030446.88310-1-npiggin@gmail.com> References: <20250502030446.88310-1-npiggin@gmail.com> MIME-Version: 1.0 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=2607:f8b0:4864:20::42b; envelope-from=npiggin@gmail.com; helo=mail-pf1-x42b.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, FREEMAIL_FROM=0.001, 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 @gmail.com) X-ZM-MESSAGEID: 1746155265354124100 Content-Type: text/plain; charset="utf-8" Setting msix entry address and data and masking is moved into common code helpers from virtio tests. For now that remains the only user, but there are changes under development to enable msix vectors for msix, e1000e, and xhci tests, which can make use of them. Reviewed-by: Akihiko Odaki Signed-off-by: Nicholas Piggin --- tests/qtest/libqos/pci.h | 3 ++ tests/qtest/libqos/pci.c | 53 +++++++++++++++++++++++++++++++++ tests/qtest/libqos/virtio-pci.c | 48 ++++------------------------- 3 files changed, 61 insertions(+), 43 deletions(-) diff --git a/tests/qtest/libqos/pci.h b/tests/qtest/libqos/pci.h index 852d4a85f6f..1c4f5406c58 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -96,8 +96,11 @@ void qpci_device_enable(QPCIDevice *dev); uint8_t qpci_find_capability(QPCIDevice *dev, uint8_t id, uint8_t start_ad= dr); void qpci_msix_enable(QPCIDevice *dev); void qpci_msix_disable(QPCIDevice *dev); +void qpci_msix_set_entry(QPCIDevice *dev, uint16_t entry, + uint64_t guest_addr, uint32_t data); bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry); bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry); +void qpci_msix_set_masked(QPCIDevice *dev, uint16_t entry, bool masked); bool qpci_msix_test_interrupt(QPCIDevice *dev, uint32_t msix_entry, uint64_t msix_addr, uint32_t msix_data); uint16_t qpci_msix_table_size(QPCIDevice *dev); diff --git a/tests/qtest/libqos/pci.c b/tests/qtest/libqos/pci.c index cc83dcc163a..e26cb4dee13 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -339,6 +339,25 @@ void qpci_msix_disable(QPCIDevice *dev) dev->msix_pba_off =3D 0; } =20 +void qpci_msix_set_entry(QPCIDevice *dev, uint16_t entry, + uint64_t guest_addr, uint32_t data) +{ + uint64_t vector_off =3D dev->msix_table_off + entry * PCI_MSIX_ENTRY_S= IZE; + + g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=3D, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_LOWER_ADDR, guest_addr & ~0= UL); + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_UPPER_ADDR, + (guest_addr >> 32) & ~0UL); + + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_DATA, data); +} + bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry) { uint32_t pba_entry; @@ -346,6 +365,9 @@ bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry) uint64_t off =3D (entry / 32) * PCI_MSIX_ENTRY_SIZE / 4; =20 g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=3D, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + pba_entry =3D qpci_io_readl(dev, dev->msix_pba_bar, dev->msix_pba_off = + off); return (pba_entry & (1 << bit_n)) !=3D 0; } @@ -357,6 +379,9 @@ bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry) uint64_t vector_off =3D dev->msix_table_off + entry * PCI_MSIX_ENTRY_S= IZE; =20 g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=3D, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + addr =3D qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); g_assert_cmphex(addr, !=3D, 0); val =3D qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); @@ -370,6 +395,34 @@ bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry) } } =20 +void qpci_msix_set_masked(QPCIDevice *dev, uint16_t entry, bool masked) +{ + uint8_t addr; + uint16_t val; + uint64_t vector_off =3D dev->msix_table_off + entry * PCI_MSIX_ENTRY_S= IZE; + + g_assert(dev->msix_enabled); + g_assert_cmpint(entry, >=3D, 0); + g_assert_cmpint(entry, <, qpci_msix_table_size(dev)); + + addr =3D qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); + g_assert_cmphex(addr, !=3D, 0); + val =3D qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); + g_assert(!(val & PCI_MSIX_FLAGS_MASKALL)); + + val =3D qpci_io_readl(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_VECTOR_CTRL); + if (masked && !(val & PCI_MSIX_ENTRY_CTRL_MASKBIT)) { + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_VECTOR_CTRL, + val | PCI_MSIX_ENTRY_CTRL_MASKBIT); + } else if (!masked && (val & PCI_MSIX_ENTRY_CTRL_MASKBIT)) { + qpci_io_writel(dev, dev->msix_table_bar, + vector_off + PCI_MSIX_ENTRY_VECTOR_CTRL, + val & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); + } +} + /** * qpci_msix_test_interrupt - test whether msix interrupt has been raised * @dev: PCI device diff --git a/tests/qtest/libqos/virtio-pci.c b/tests/qtest/libqos/virtio-pc= i.c index d6333a4d576..4e27b7a7931 100644 --- a/tests/qtest/libqos/virtio-pci.c +++ b/tests/qtest/libqos/virtio-pci.c @@ -299,66 +299,28 @@ void qvirtio_pci_device_disable(QVirtioPCIDevice *d) void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci, QGuestAllocator *alloc, uint16_t e= ntry) { - uint32_t control; - uint64_t off; - g_assert(d->pdev->msix_enabled); - off =3D d->pdev->msix_table_off + (entry * 16); - - g_assert_cmpint(entry, >=3D, 0); - g_assert_cmpint(entry, <, qpci_msix_table_size(d->pdev)); vqpci->msix_entry =3D entry; - vqpci->msix_addr =3D guest_alloc(alloc, 4); qtest_memset(d->pdev->bus->qts, vqpci->msix_addr, 0, 4); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_LOWER_ADDR, vqpci->msix_addr & ~0U= L); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_UPPER_ADDR, - (vqpci->msix_addr >> 32) & ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_DATA, vqpci->msix_data); - - control =3D qpci_io_readl(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL, - control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); =20 + qpci_msix_set_entry(d->pdev, entry, vqpci->msix_addr, vqpci->msix_data= ); + qpci_msix_set_masked(d->pdev, entry, false); d->msix_ops->set_queue_vector(d, vqpci->vq.index, entry); } =20 void qvirtio_pci_set_msix_configuration_vector(QVirtioPCIDevice *d, QGuestAllocator *alloc, uint16_t e= ntry) { - uint32_t control; - uint64_t off; - g_assert(d->pdev->msix_enabled); - off =3D d->pdev->msix_table_off + (entry * 16); - - g_assert_cmpint(entry, >=3D, 0); - g_assert_cmpint(entry, <, qpci_msix_table_size(d->pdev)); d->config_msix_entry =3D entry; - d->config_msix_data =3D 0x12345678; d->config_msix_addr =3D guest_alloc(alloc, 4); qtest_memset(d->pdev->bus->qts, d->config_msix_addr, 0, 4); =20 - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_LOWER_ADDR, d->config_msix_addr & = ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_UPPER_ADDR, - (d->config_msix_addr >> 32) & ~0UL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_DATA, d->config_msix_data); - - control =3D qpci_io_readl(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL); - qpci_io_writel(d->pdev, d->pdev->msix_table_bar, - off + PCI_MSIX_ENTRY_VECTOR_CTRL, - control & ~PCI_MSIX_ENTRY_CTRL_MASKBIT); - + qpci_msix_set_entry(d->pdev, entry, d->config_msix_addr, + d->config_msix_data); + qpci_msix_set_masked(d->pdev, entry, false); d->msix_ops->set_config_vector(d, entry); } =20 --=20 2.47.1