From nobody Thu Dec 18 22:22:58 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=1733992636; cv=none; d=zohomail.com; s=zohoarc; b=PXjSPRsEsfQcFDxnRiQuxP+5nZ3BEarytjZA6J/0FdYIVFgMkqQxYo0x+40cc9mBMJV275pLI16rc6M4GShW0obBizgYVqWLFmeQd+tiFqADAvNwDHYA+pyC0B1hM+Jx8esT+uxHOg/BFnKCnM8oDpzlZifrIH6AEiXpCPauR50= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733992636; 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=e6QI+StavfES5vlYy9klhZaUtTtmII/hVb11fVMVfTA=; b=eUfwtpctrFkBTdRaO4czv82obEOlyBh3ONGZJ8LmUvq1YA7ne9wuAxrMdL10zvuQjcJzwRHFkLv0M8SHCFKCAkKFVmVmdRgSCzMIqI5NIPUsC7Ab4fc0hLHtawIOatTfMRXcfw/QzmDjynbBi45ALHmsckCHLDFyu7GMlg44Bpo= 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 173399263620187.25573153063044; Thu, 12 Dec 2024 00:37:16 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tLefa-0006iv-GM; Thu, 12 Dec 2024 03:35:38 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tLefX-0006ii-Ig for qemu-devel@nongnu.org; Thu, 12 Dec 2024 03:35:35 -0500 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tLefU-0004Y3-HL for qemu-devel@nongnu.org; Thu, 12 Dec 2024 03:35:34 -0500 Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-2eeb4d643a5so271760a91.3 for ; Thu, 12 Dec 2024 00:35:32 -0800 (PST) Received: from wheely.local0.net ([1.146.48.169]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2f142dae788sm714624a91.12.2024.12.12.00.35.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Dec 2024 00:35:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733992531; x=1734597331; 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=e6QI+StavfES5vlYy9klhZaUtTtmII/hVb11fVMVfTA=; b=iWHzVpGBUP3wia5m1d1bAKeYYURLSwe2/YFuCeCOgHHn4Dmp0vVg7gdDNMrvCdSTFL f8iJvH0jaGIQK2Lp+DFO2DsvF1SbD0ADeDVpyz44XfvMKOY+TXXeoyISsimhfPbXmdBj yt5XG9tWQoCFJaqSm1Zs1FjMgKMlnJtve+5xyJMbvzvuyYOumzqyB3ThmYCo10reguUT Cot3RYxDXQK50dV+xZ9pVHjSkNWdKtAUBUZjZagyN/8ObwW7GXyn5oZeCI3mSX7yrMq6 jnOFqTiepD41eYTCauAVlMeInM56KfRC3wKukPeN8/tEHuILYTyD0YkPb3lIyWT9Uzgy nqng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733992531; x=1734597331; 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=e6QI+StavfES5vlYy9klhZaUtTtmII/hVb11fVMVfTA=; b=kExjoz6au4HBe24YxZRsvL+hcm0FnxycDYq0Z3rzCFJkorakK8D5+NBxpxjgZWDn17 Y3u6tm46j4o4JLLNKjBGMKVNDGA6i07yrifMBTh8KM9CK7S9MzJVGnpCaz52hMhlEGu9 by1sW/t85Mjyt8K+OfryrDdlmct2Qfm0TV4h5p6zhHQGgbVV59Vd+QjbgRA7rxTlr2lo I3uMwkbv1KiZn4/GVTC9/QcLnf0dZDdmsx8tJo6YBdQ+Ln76pSJDMsOAo92lgQH9e76v +leMR6338aEuid/22f5/QtwfwzrWFmNmGN0rMbVmOnYYmEg2BCb+HnmEJ5SjwGxgNWJC fYhw== X-Gm-Message-State: AOJu0YzyqzVQqMNSl/UUgADuBs5KZ2YP9L7wjVayEr3hCh7MLyP4RYWg CD/pMRcb28FrcTZTVmXlM9876wWSPP6StItS7RHsF1FnM3s2JoT4VodDIw== X-Gm-Gg: ASbGncsZ5aO77wld//T0FeDHx3AXpKmPza3rmKkBeCD0U3sdhY7vKG8FyFJw0zc3JU6 ozF8Uhrzv2VlM0ZBtuw53KTmCWiWisoaJhHI46kAJT+dWF1pJ9tokzKkL4ci1yY5a3srW3Tgzvi JO4HWQBUs1kfzegazxGW3vXORO8Rjx6egbWlICUhIWdEaI9Z6dGmF/rh81hTFJREmQmj47YoYhG 1Te8arWx/0ntYTKaz0KLe0RijL4DJ2GgC8QIR6UhU68whuCRwxUJWXgFBM= X-Google-Smtp-Source: AGHT+IESTsS3C0fK7iP4KKd2Hu4bTJZGNqCuyMaGPChplcBzzJcsSbnVN1go4XAdghHa83uHYw/sfg== X-Received: by 2002:a17:90b:1c05:b0:2ee:f550:3837 with SMTP id 98e67ed59e1d1-2f127f64262mr9871515a91.7.1733992530781; Thu, 12 Dec 2024 00:35:30 -0800 (PST) From: Nicholas Piggin To: qemu-devel@nongnu.org Cc: Nicholas Piggin , "Michael S. Tsirkin" , Marcel Apfelbaum , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Dmitry Fleytman , Akihiko Odaki , Sriram Yagnaraman Subject: [PATCH 2/8] qtest/libqos/pci: Fix qpci_msix_enable sharing bar0 Date: Thu, 12 Dec 2024 18:34:55 +1000 Message-ID: <20241212083502.1439033-3-npiggin@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20241212083502.1439033-1-npiggin@gmail.com> References: <20241212083502.1439033-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::1036; envelope-from=npiggin@gmail.com; helo=mail-pj1-x1036.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: 1733992638148116600 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 msix with. 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: 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 9dc82ea723a..5a7b2454ad5 100644 --- a/tests/qtest/libqos/pci.h +++ b/tests/qtest/libqos/pci.h @@ -68,6 +68,7 @@ struct QPCIDevice bool bars_mapped[6]; QPCIBar bars[6]; 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 a42ca08261d..023c1617680 100644 --- a/tests/qtest/libqos/pci.c +++ b/tests/qtest/libqos/pci.c @@ -288,15 +288,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 @@ -307,6 +313,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); @@ -315,10 +322,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.45.2