From: sashiko-bot@kernel.org
To: "Chengwen Feng" <fengchengwen@huawei.com>
Cc: linux-pci@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH v20 06/16] PCI/TPH: Cache negotiated max requester type at probe time
Date: Tue, 14 Jul 2026 10:57:25 +0000 [thread overview]
Message-ID: <20260714105726.44F501F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260714104325.54444-7-fengchengwen@huawei.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [Medium] get_rp_completer_type() does not validate the Root Port's TPH Completer Supported field, allowing a reserved value (2) to be propagated to the endpoint's TPH Requester Enable control register.
--
--- Patch [6]: [PATCH v20 06/16] PCI/TPH: Cache negotiated max requester type at probe time ---
commit 29ae72049d4aa847803163ffb3618441007a362d
Author: Chengwen Feng <fengchengwen@huawei.com>
PCI/TPH: Cache negotiated max requester type at probe time
pcie_enable_tph() recalculates the TPH requester capability and queries
root port completer type on every invocation, causing redundant config
space reads. Calculate the negotiated maximum requester type once during
pci_tph_init() and cache it in a new pdev->tph_max_type bitfield. Simplify
the enable path by reusing the cached value to eliminate repeated hardware
access.
> diff --git a/drivers/pci/tph.c b/drivers/pci/tph.c
> index 41084a45b0bbc..d123f91775c65 100644
> --- a/drivers/pci/tph.c
> +++ b/drivers/pci/tph.c
[ ... ]
> @@ -551,13 +536,31 @@ void pci_no_tph(void)
>
> void pci_tph_init(struct pci_dev *pdev)
> {
> + u8 tph_req_type, rp_req_type;
> int num_entries;
> u32 save_size;
> + u32 reg = 0;
>
> pdev->tph_cap = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_TPH);
> if (!pdev->tph_cap)
> return;
>
> + /* Get req_type supported by device and its Root Port */
> + pci_read_config_dword(pdev, pdev->tph_cap + PCI_TPH_CAP, ®);
> + if (FIELD_GET(PCI_TPH_CAP_EXT_TPH, reg))
> + tph_req_type = PCI_TPH_REQ_EXT_TPH;
> + else
> + tph_req_type = PCI_TPH_REQ_TPH_ONLY;
> +
> + /* Check if the device is behind a Root Port */
> + if (pci_pcie_type(pdev) != PCI_EXP_TYPE_RC_END) {
> + rp_req_type = get_rp_completer_type(pdev);
> + /* Final req_type is the smallest value of two */
> + tph_req_type = min(tph_req_type, rp_req_type);
> + }
> +
> + pdev->tph_max_type = tph_req_type;
[Severity: Medium]
This isn't a bug introduced by this patch, but this caching logic embeds a
pre-existing issue where get_rp_completer_type() does not validate the Root
Port's TPH Completer Supported field.
If a non-compliant Root Port returns the reserved value 10b (2), could this
unvalidated value be propagated into pdev->tph_max_type and later written
to the Endpoint's TPH Requester Enable control register by
pcie_enable_tph()?
Would writing this reserved value to the endpoint's TPH control register
cause unpredictable hardware behavior or PCIe bus errors?
>
> num_entries = pcie_tph_get_st_table_size(pdev);
> save_size = sizeof(u32) + num_entries * sizeof(u16);
> pci_add_ext_cap_save_buffer(pdev, PCI_EXT_CAP_ID_TPH, save_size);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260714104325.54444-1-fengchengwen@huawei.com?part=6
next prev parent reply other threads:[~2026-07-14 10:57 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-14 10:43 [PATCH v20 00/16] vfio/pci: Add PCIe TPH support Chengwen Feng
2026-07-14 10:43 ` [PATCH v20 01/16] PCI/TPH: Add requester/completer type helpers Chengwen Feng
2026-07-14 10:54 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 02/16] dma-buf: add optional get_pci_tph() callback Chengwen Feng
2026-07-14 10:50 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 03/16] vfio/pci: implement get_pci_tph and DMA_BUF_TPH feature Chengwen Feng
2026-07-14 10:50 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 04/16] PCI/TPH: Fix pcie_tph_get_st_table_loc() field extraction Chengwen Feng
2026-07-14 10:54 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 05/16] PCI/TPH: Fix tph_enabled concurrent update race by bitfield packing Chengwen Feng
2026-07-14 11:00 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 06/16] PCI/TPH: Cache negotiated max requester type at probe time Chengwen Feng
2026-07-14 10:57 ` sashiko-bot [this message]
2026-07-14 10:43 ` [PATCH v20 07/16] PCI/TPH: Refactor pcie_enable_tph and add requester variant Chengwen Feng
2026-07-14 10:58 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 08/16] PCI/TPH: Refactor pcie_tph_get_cpu_st & " Chengwen Feng
2026-07-14 11:00 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 09/16] PCI/TPH: Add macros to check standard and extended TPH support Chengwen Feng
2026-07-14 11:07 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 10/16] PCI/TPH: Add pcie_tph_set_st_entries() batch ST entry programming helper Chengwen Feng
2026-07-14 11:11 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 11/16] PCI/TPH: Add pci_tph_dsm_supported() helper to detect device TPH ST _DSM Chengwen Feng
2026-07-14 11:27 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 12/16] vfio/pci: Add basic NO-ST TPH VFIO device feature support Chengwen Feng
2026-07-14 11:10 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 13/16] vfio/pci: Add IV-ST TPH policy and VFIO TPH_ST batch programming support Chengwen Feng
2026-07-14 11:14 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 14/16] vfio/pci: Add DS-ST TPH policy and extend TPH_RESOLVE capabilities Chengwen Feng
2026-07-14 11:12 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 15/16] vfio/pci: Sync core PCI TPH software state across device lifecycle and resets Chengwen Feng
2026-07-14 11:28 ` sashiko-bot
2026-07-14 10:43 ` [PATCH v20 16/16] vfio/pci: Expose per-device TPH state via debugfs Chengwen Feng
2026-07-14 11:17 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260714105726.44F501F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=fengchengwen@huawei.com \
--cc=kvm@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.