From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Li Yifan <yifan2.li@intel.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
linux-pci@vger.kernel.org, Wentao Liang <vulab@iscas.ac.cn>,
Li Lili <lili.li@intel.com>, Wang Jie <jie.wang@intel.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] PCI/PTM: Keep ptm_enable_cnt balanced when pci_enable_ptm() fails
Date: Mon, 9 Nov 2026 11:01:50 +0100 [thread overview]
Message-ID: <20261109100150.GI176724@black.igk.intel.com> (raw)
In-Reply-To: <20261104121457.2108515-1-yifan2.li@intel.com>
On Wed, Nov 04, 2026 at 08:14:57PM +0800, Li Yifan wrote:
> Since commit e1092d5e15e6 ("PCI/PTM: Do not enable PTM automatically
> for Root and Switch Upstream Ports"), pci_enable_ptm() takes a
> reference on the device and on each port of the upstream path, and
> pci_disable_ptm() releases them. If pci_enable_ptm() fails, the counts
> can become incorrect in two ways:
>
> 1. pci_disable_ptm() decrements dev->ptm_enable_cnt without a check.
> Many drivers ignore the return value of pci_enable_ptm() and call
> pci_disable_ptm() unconditionally, for example mlx5 and bnxt. If
> pci_enable_ptm() failed, for example because the upstream port does
> not support PTM, the count becomes -1 and stays negative after the
> driver unbinds. Then pcie_ptm_enabled() returns true, and
> pci_resume_ptm() can enable PTM on the device after a resume,
> although the upstream path does not support PTM. Before
> e1092d5e15e6, pci_disable_ptm() did nothing if PTM was not enabled.
>
> 2. If __pci_enable_ptm() fails for the device after the upstream path
> is enabled, pci_enable_ptm() drops the reference on the device, but
> it keeps the references on the upstream ports. For example, this
> occurs if the device has no PTM Capability and its upstream port
> has one. Callers that check pcie_ptm_enabled() before
> pci_disable_ptm() never release these references, so the upstream
> ports keep PTM enabled with no user. Callers that call
> pci_disable_ptm() unconditionally release them only through the
> underflow in 1.
>
> Fix both problems in one change, because a fix for only one of them
> makes the other one worse. Release the upstream references when
> __pci_enable_ptm() fails. Make pci_disable_ptm() do nothing if PTM is
> not enabled for the device, and use atomic_dec_if_positive() so that
> the check and the decrement are one atomic operation.
>
> The fix for 2 is based on a patch from Wentao Liang [1].
>
> Fixes: e1092d5e15e6 ("PCI/PTM: Do not enable PTM automatically for Root and Switch Upstream Ports")
> Cc: stable@vger.kernel.org
> Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
> Link: https://lore.kernel.org/r/20261102222817.GA983941@bhelgaas
> Link: https://lore.kernel.org/r/20260616141733.1688264-1-vulab@iscas.ac.cn # [1]
> Signed-off-by: Li Yifan <yifan2.li@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
next prev parent reply other threads:[~2026-11-09 10:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 12:14 [PATCH] PCI/PTM: Keep ptm_enable_cnt balanced when pci_enable_ptm() fails Li Yifan
2026-11-04 12:29 ` sashiko-bot
2026-11-09 10:01 ` Mika Westerberg [this message]
2026-11-09 23:05 ` Bjorn Helgaas
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=20261109100150.GI176724@black.igk.intel.com \
--to=mika.westerberg@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=jie.wang@intel.com \
--cc=lili.li@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=vulab@iscas.ac.cn \
--cc=yifan2.li@intel.com \
/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.