From nobody Fri Aug 14 21:47:58 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hMG730MS4z6npt4 for ; Fri, 14 Aug 2026 21:47:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hMG726Txxz3fFr for ; Fri, 14 Aug 2026 21:47:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786744079; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ki8b9iKZKcB4+LY6+9bP41PnEyhY/zMGBviwCsRtrss=; b=qOcLG662Exx64c4aJofLB1+JzwGK9/VrlTo+YbMDSN/YAp9DsA7wZwaurakKaDC2V6dYc7 atpSOFbWW5Mlg8wLbt2FOH5k4CvdTk1CrSMdClI0jy8dEgKJ6t3NLxnMMtMqX6971WdOv+ fLeWmqRA/fq2mL+GpghoRlF5tCyg4y7TJTWMY6RxtYxKo5xaTQc/HJosk4/7gtVhG5IwzJ Iki8gDfO85eVgiU7OD8j8puvAYDWp4/aSC7okStltuwvsq28gjUbAVaioAI6HbM+2/WuN+ sLckXbDwynioC2ChFDI4PdfdXLfX8EABHY/0lZSWFkMZkUnrxb8zy1jo+Kg+aQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786744079; a=rsa-sha256; cv=none; b=NaDnp4527r4seFOGaFF/VnVkGmfhJplLIJEgELQJr9PpfjLmNxFyez05xG98Q5GjAYL8hN trOJKg9jrp29viYLgnSa4gesbs2na5b1LuNeEZqZT8UpckTTvzg6XvlZnc1O6wEWBGVQWr JCMYNQJuqNwdhL40slgBU4rq69caSL4Ed6TjSxrrpf/cPR9Eeho5a15AKbWU3t7Q9l1cYC Jb8W+IhCpfe2kAA+t3jy0Z7sCssZLkNIdnFAFfVrvj+paMiw474eR/8x5oUvkh6UYDIfYK caO2NHGih2GMtrS6mgkXIXQMtVZSd4FaggQ/mpfYJ8cORi7d2E99SvpTfkHmzw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786744078; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Ki8b9iKZKcB4+LY6+9bP41PnEyhY/zMGBviwCsRtrss=; b=A7lsK8WE/f+B9Yl6/ZENyUyNU/Hzww3wPqANfcWMGokZ/5E3FMmOd2V5AoriAw+qHGNgR+ QhqGDgu7AwHSoaYFhvHxpFVPaJokkop2bwYdPmc0UTzjmEtJwWX3OgvA6apPLNRGKuumno fbnswImhex/3VWU9N8Ou6IV+piTJIJpPTzYwGaOBt38q//bCX4tnGsVcgWgywyrXF6ThGi 9fdqvUP3icdkasxbozmJtCMAyhiR5KS2Yb/EwKWjPv0HVlpoj9aji2MPPEQBsI3IdEplEL 9bpk/s1gqA3FmivPdJb+EOLhp/BZ9/Wp9F5jFE6+/fABM6568SVsOluk3yK9eQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hMG723gzHzxZ for ; Fri, 14 Aug 2026 21:47:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1c70d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 14 Aug 2026 21:47:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 57293f4541cd - main - pci: Do not reconcile MPS across PCI domains List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 57293f4541cdea8e4158f751a4439f69b3ec1711 Auto-Submitted: auto-generated Date: Fri, 14 Aug 2026 21:47:58 +0000 Message-Id: <6a7f8d0e.1c70d.2c3a2ee5@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=57293f4541cdea8e4158f751a4439f69b3ec1711 commit 57293f4541cdea8e4158f751a4439f69b3ec1711 Author: Kevin Bowling AuthorDate: 2026-08-14 05:16:41 +0000 Commit: Kevin Bowling CommitDate: 2026-08-14 21:47:50 +0000 pci: Do not reconcile MPS across PCI domains A PCI function can provide a host bridge into a synthetic PCI domain. Intel VMD does this: the host facing VMD function remains in its original domain while the hidden Root Ports and endpoints appear in a separate domain. The VMD function's Device Control does not describe an upstream link in that synthetic hierarchy. The hierarchy wide cold pass incorrectly used the VMD function's MPS to reprogram the hidden ports and their endpoints. Stop both cold reconciliation and runtime path walks at a PCI domain boundary. The real Root Ports within the VMD domain continue to reconcile their endpoints normally. Reviewed by: imp Tested by: Michael Butler Fixes: 8e9fe9996a1f ("pci: Reconcile MPS before attaching PCIe devices") MFC after: 6 days Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D58837 --- sys/dev/pci/pci.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 83ea487bdaa5..34ee261604a2 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -4488,6 +4488,13 @@ pcie_path_mps(device_t dev, uint16_t *mpsp) pcib = device_get_parent(bus); if (pcib == NULL || !is_pci_device(pcib)) break; + /* + * A PCI function may expose a host bridge for a synthetic PCI + * domain. Its Device Control belongs to the parent domain and + * does not describe an upstream link in the synthetic hierarchy. + */ + if (pci_get_domain(pcib) != pci_get_domain(dev)) + break; dinfo = device_get_ivars(pcib); if (dinfo->cfg.pcie.pcie_location != 0) { mps = pcie_read_config(pcib, PCIER_DEVICE_CTL, 2) & @@ -4705,6 +4712,13 @@ pcie_reconcile_link_mps(device_t bus) pcib = device_get_parent(bus); if (!is_pci_device(pcib)) return; + /* + * A PCI function may provide a host bridge into a separate domain, + * as Intel VMD does. Do not treat the function's host-facing PCIe + * Device Control as the upstream end of a link in the child domain. + */ + if (pci_get_domain(pcib) != pcib_get_domain(bus)) + return; upinfo = device_get_ivars(pcib); if (upinfo->cfg.pcie.pcie_location == 0) return;