From: weilinghan <weilinghan@xiaomi.com>
To: <helgaas@kernel.org>
Cc: <bhelgaas@google.com>, <hulingchen@xiaomi.com>,
<linux-kernel@vger.kernel.org>, <vidyas@nvidia.com>,
<weilinghan@xiaomi.com>, <weipengliang@xiaomi.com>
Subject: Re: [PATCH] PCI: remove call pci_save_aspm_l1ss_state() from pci_save_pcie_state()
Date: Tue, 8 Jul 2025 13:53:07 +0800 [thread overview]
Message-ID: <20250708055307.4555-1-weilinghan@xiaomi.com> (raw)
In-Reply-To: <20250707194903.GA2096996@bhelgaas>
On Mon, 7 Jul 2025 14:49:03 -0500, Bjorn Helgaas wrote:
>On Mon, Jul 07, 2025 at 07:52:36PM +0800, weilinghan wrote:
>> During the suspend-resume process, PCIe resumes by enabling L1.2 in
>> the pci_restore_state function due to patch 4ff116d0d5fd.
>> However, in the following scenario, the resume process becomes very
>> time-consuming:
>>
>> 1.The platform has multiple PCI buses.
>> 2.The link transition time from L1.2 to L0 exceeds 100 microseconds by
>> accessing the configuration space of the EP.
>> 3.The PCI framework has async_suspend enabled (by calling
>> device_enable_async_suspend(&dev->dev)
>> in pci_pm_init(struct pci_dev *dev)).
>> 4.On ARM platforms, CONFIG_PCI_LOCKLESS_CONFIG is not enabled, which
>> means the pci_bus_read_config_##size interfaces contain locks (spinlock).
>>
>> Practical measurements show that enabling L1.2 during the resume
>> process introduces an additional delay of approximately 150ms in the
>> pci_pm_resume_noirq() function for platforms with two PCI buses,
>> compared to when L1.2 is disabled.
>We really need an argument for why this change would be correct, not just the fact that it makes resume faster. Vidya made the change in 4ff116d0d5fd to fix a problem, and it looks like this patch would reintroduce the problem.
Ok, I'm seeing lock contention issues when multiple PCI devices call pci_restore_state() during the resume_noirq phase.
This problem arises due to commit a1e4d72cd ("PM: Allow PCI devices to suspend/resume asynchronously"), which changed the noirq phase of PCI devices to be executed asynchronously. As a result, multiple PCI devices may attempt to restore configuration space concurrently, leading to contention on the PCI configuration lock.
Additionally, commit 4ff116d0d5fd ("PCI/ASPM: Save L1 PM Substates Capability for suspend/resume") by Vidya enables L1.2 state handling, which increases the time spent in the critical section, thereby further exacerbating the lock contention and increasing resume latency.
Currently, I'm considering a few possible approaches to address this:
1.In the driver, call device_disable_async_suspend() to prevent asynchronous suspend/resume for specific devices that are known to have contention issues.
2.Enable CONFIG_PCI_LOCKLESS_CONFIG on the ARM platform
3.Make dev_pm_skip_resume() return true for certain devices, skipping pci_restore_state() in the PCI core during resume.
4.revert commit a1e4d72cd ("PM: Allow PCI devices to suspend/resume asynchronously")
I'd appreciate any insights or recommendations from the community on the best way to proceed. Are there any preferred approaches for handling?
Thanks,
weilinghan
prev parent reply other threads:[~2025-07-08 5:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-07 11:52 weilinghan
2025-07-07 19:49 ` Bjorn Helgaas
2025-07-08 5:53 ` weilinghan [this message]
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=20250708055307.4555-1-weilinghan@xiaomi.com \
--to=weilinghan@xiaomi.com \
--cc=bhelgaas@google.com \
--cc=helgaas@kernel.org \
--cc=hulingchen@xiaomi.com \
--cc=linux-kernel@vger.kernel.org \
--cc=vidyas@nvidia.com \
--cc=weipengliang@xiaomi.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®