** Description changed:
[ Impact ]
The issue is reproducible on Ubuntu 24.04.3 with 6.14.0-33 kernel.
kdump fails during early crash-kernel boot on kernels that include:
- 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
+ 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing")
This commit was the bisect result.
Reverting only this commit restores normal kdump behavior.
-
[Fix]
https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/commit/?h=pm&id=f043083843cac1105206437d8c58e725b6412fad
-
Commit 4d4c10f763d7 ("PCI: Explicitly put devices into D0 when
initializing") added pci_pm_power_up_and_verify_state() to pci_pm_init().
The helper ignores pci_power_up()'s return value indicating that BARs
need restoring. Its resume callers restore saved configuration
afterwards; pci_pm_init() does not.
D3hot-to-D0 may reset a device and lose its BARs (PCI PM 1.2, sec 5.4.1).
After enumeration powers it up, pci_enable_device() reads D0 and skips
the full power-up path. Previously, a device still in D3hot at enable
time took that path, including BAR restoration.
On and AMD server, two AMD xHCI controllers [1022:17d2] are in runtime
D3hot with No_Soft_Reset clear before kdump. Diagnostic reads on
v7.3-rc6-37 show the following for 0000:01:00.4 in the crash kernel:
PMCSR BAR0
before the platform power call 0003 f4100004
after the platform power call 0003 f4100004
after native D0 power-up 0000 00000004
The upper BAR DWORD stays zero. pci_power_up() returns 1, but the BAR
address remains zero while dev->resource[0] still contains 0xf4100000.
Without BAR restoration, the crash kernel hangs during boot. The
last console output includes:
pci 0000:01:00.4: enabling device (0000 -> 0002)
Restoring both controllers' BARs gives matching readbacks and allows
kdump to save a vmcore and reboot. An AMD Turin xHCI [1022:1557] shows
the same BAR loss; restoring its BAR also allows kdump to complete.
Read the initial power state first. Otherwise, pci_power_up() may
request a BAR restore based on a cached PCI_UNKNOWN state, even
when the device is already in D0.
For devices already in D0, only synchronize the platform state so
that ACPI calls such as _REG still run. For other states, use
pci_set_full_power_state() to power up the device and restore BARs
when needed.
Impact : kdump to save a vmcore and reboot with this fix. Without it ,
it hangs. See description above.
[ Test Plan ]
[ Where problems could occur ]
[ Other Info ]
+
+ Resolute
+
https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/resolute/+ref/kdump_fails_lp2133410
+
+ Noble
+
+
https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/noble/+ref/kdump_lp_2171020
+
+ Stonking
+
https://code.launchpad.net/~mreed8855/ubuntu/+source/linux/+git/stonking/+ref/kdump_fails_lp_2133410
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2171020
Title:
[SRU] PCI/PM: Restore BARs after powering up during enumeration
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2171020/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs