From: Bjorn Helgaas <helgaas@kernel.org>
To: Hans Zhang <18255117159@163.com>
Cc: bhelgaas@google.com, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 0/7] PCI: Replace short msleep() calls with more precise delay functions
Date: Mon, 25 Aug 2025 15:30:51 -0500 [thread overview]
Message-ID: <20250825203051.GA781401@bhelgaas> (raw)
In-Reply-To: <155f9f4f-45e4-45ea-85c2-de67115bd12c@163.com>
On Mon, Aug 25, 2025 at 12:05:26AM +0800, Hans Zhang wrote:
> On 2025/8/23 00:46, Bjorn Helgaas wrote:
> > On Fri, Aug 22, 2025 at 11:59:01PM +0800, Hans Zhang wrote:
> > > This series replaces short msleep() calls (less than 20ms) with more
> > > precise delay functions (fsleep() and usleep_range()) throughout the
> > > PCI subsystem.
> > >
> > > The msleep() function with small values can sleep longer than intended
> > > due to timer granularity, which can cause unnecessary delays in PCI
> > > operations such as link status checking, reset handling, and hotplug
> > > operations.
> > I would split this a little differently:
> >
> > - Add #defines for values from PCIe base spec. Make the #define
> > value match the spec value. If there's adjustment, e.g.,
> > doubling, do it at the sleep site. Adjustment like this seems a
> > little paranoid since the spec should already have some margin
> > built into it.
> patch 0001 I intend to modify it as follows:
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index b0f4d98036cd..fb4aff520f64 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -4963,11 +4963,8 @@ void pci_reset_secondary_bus(struct pci_dev *dev)
> ctrl |= PCI_BRIDGE_CTL_BUS_RESET;
> pci_write_config_word(dev, PCI_BRIDGE_CONTROL, ctrl);
>
> - /*
> - * PCI spec v3.0 7.6.4.2 requires minimum Trst of 1ms. Double
> - * this to 2ms to ensure that we meet the minimum requirement.
> - */
> - msleep(2);
> + /* Wait for the reset to take effect */
> + fsleep(PCI_T_RST_SEC_BUS_DELAY_US);
This mixes 3 changes:
1) Add #define PCI_T_RST_SEC_BUS_DELAY_US
2) Reduce overall delay from 2ms to 1ms
3) Convert msleep() to fsleep()
There's no issue at all with 1), and I don't know if it's really worth
doing 2), so I would do this:
- msleep(2);
+ msleep(2 * PCI_T_RST_SEC_BUS_DELAY_MS);
Then we can consider the question of whether "msleep(2)" is misleading
to the reader because the actual delay is always > 20ms. If that's
the case, I would consider a separate patch like this:
- msleep(2 * PCI_T_RST_SEC_BUS_DELAY_MS);
+ fsleep(2 * PCI_T_RST_SEC_BUS_DELAY_US);
to make the stated intent of the code closer to the actual behavior.
If we do this, the commit log should include concrete details about
why short msleep() doesn't work as advertised.
> > I'm personally dubious about the places you used usleep_range().
> > These are low-frequency paths (rcar PHY ready, brcmstb link up,
> > hotplug command completion, DPC recover) that don't seem critical. I
> > think they're all using made-up delays that don't come from any spec
> > or hardware requirement anyway. I think it's hard to make an argument
> > for precision here.
>
> My initial understanding was the same. There was no need for such precision
> here. Then msleep will be retained, but only modified to #defines?
The #defines are useful when (1) the value comes from a spec or (2) we
want to use the same value several places. Otherwise, the value is
minimal.
For rcar PHY ready, brcmstb link up, hotplug command completion, DPC
recover, I don't think either applies, so personally I would probably
leave them alone (or, if we think short msleep() is just misleading in
principle, convert them to fsleep()).
Bjorn
next prev parent reply other threads:[~2025-08-25 20:30 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-22 15:59 [PATCH v2 0/7] PCI: Replace short msleep() calls with more precise delay functions Hans Zhang
2025-08-22 15:59 ` [PATCH v2 1/7] PCI: Replace msleep(2) with fsleep() for precise delay Hans Zhang
2025-08-22 15:59 ` [PATCH v2 2/7] PCI: Replace msleep(1) with fsleep() for precise link status checking Hans Zhang
2025-08-22 15:59 ` [PATCH v2 3/7] PCI: rcar-host: Replace msleep(1) with fsleep() for precise speed change monitoring Hans Zhang
2025-08-22 15:59 ` [PATCH v2 4/7] PCI: brcmstb: Replace msleep(5) with usleep_range() for precise link up checking Hans Zhang
2025-08-22 15:59 ` [PATCH v2 5/7] PCI: rcar: Replace msleep(5) with usleep_range() for precise PHY ready checking Hans Zhang
2025-08-22 15:59 ` [PATCH v2 6/7] PCI: pciehp: Replace msleep(10) with usleep_range() for precise delays Hans Zhang
2025-08-22 15:59 ` [PATCH v2 7/7] PCI/DPC: Replace msleep(10) with usleep_range() for precise RP busy checking Hans Zhang
2025-08-22 16:46 ` [PATCH v2 0/7] PCI: Replace short msleep() calls with more precise delay functions Bjorn Helgaas
2025-08-24 16:05 ` Hans Zhang
2025-08-25 20:30 ` Bjorn Helgaas [this message]
2025-08-26 17:07 ` Hans Zhang
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=20250825203051.GA781401@bhelgaas \
--to=helgaas@kernel.org \
--cc=18255117159@163.com \
--cc=bhelgaas@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox