Public bug reported:

Hardware: ASRock X870E Taichi Lite (AMD AM5, FCH SMBus 1022:790b rev 71), DDR5.
Kernel: Ubuntu 24.04 HWE 7.0.0-42-generic. The same code is in 6.8.

Symptom: intermittently (1 of 2 boots), a udev worker probing the DDR5
SPD hub hangs forever in D state:

  INFO: task (udev-worker):862 blocked for more than 122 seconds.
  schedule
  __request_region_locked
  __request_region
  piix4_sb800_region_request [i2c_piix4]
  piix4_access_sb800 [i2c_piix4]
  i2c_smbus_read_byte_data
  spd5118_i2c_probe [spd5118]

systemd-udev-settle then times out (anything requiring it fails, here
the ZFS pool import), and a later reboot hangs in device_shutdown() on
the stuck device. The sp5100_tco watchdog does not rescue it, because it
is stopped in the reboot notifier before device_shutdown().

Cause: i2c-piix4 and sp5100_tco both take request_mem_region_muxed() on
the same 8 bytes of the FCH PM window (0xFED80300). i2c-piix4 releases
with release_mem_region(), which wakes waiters on muxed_resource_wait.
sp5100_tco's MMIO setup (sp5100_tco_setupdevice_mmio) releases with
release_resource() plus kfree(), which never wakes them; only
__release_region() calls wake_up(&muxed_resource_wait). An SMBus
transaction that arrives while sp5100_tco holds the window sleeps
uninterruptibly forever. Since 6.11 i2c-piix4 registers DDR5 SPD clients
at probe time, so coldplug transactions overlap a sp5100_tco module load
and the race shows at boot.

Kernel stamps from the hung boot: SPD clients created at 4.738 s,
"sp5100-tco: initialized" at 4.912 s. On a good boot sp5100_tco finished
before i2c-piix4 probed.

Suggested fix: in sp5100_tco, release the region with
release_mem_region() on the same address and size it was requested with,
instead of release_resource() + kfree().

Workaround in use: load sp5100_tco before udev coldplug (a unit ordered
Before=systemd-udev-trigger.service). With that, 3 of 3 boots were
clean.

** Affects: linux (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2173072

Title:
  sp5100_tco: release_resource() on the muxed FCH PM region never wakes
  i2c-piix4 waiters; SPD probe hangs at boot (AM5, DDR5, 7.0)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2173072/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to