Public bug reported:

igb: unbounded retry loop in igb_release_swfw_sync_i210() during
probe deadlocks pciehp and breaks hibernate resume 
Summary 
On a ThinkPad X1 Carbon Gen 10 with a CalDigit TS3 Plus Thunderbolt 3 dock 
attached at boot, the dock’s Intel I210 Ethernet
controller is probed by igb during the window in which the Thunderbolt PCIe 
tunnel established by the BIOS is torn down and rebuilt
by the OS driver. 
If the PCIe link drops while igb_probe() is running, the probe reaches 
igb_release_swfw_sync_i210(), which retries
igb_get_hw_semaphore_i210() in a loop with no iteration limit and no error 
path. Because the device is no longer reachable,
register reads return all-ones, the semaphore can never be acquired, and the 
loop cannot terminate. 
The udev worker executing the probe therefore spins in R state indefinitely 
(observed for 20+ minutes), holding device_lock on the
igb device, taken by really_probe(). 
Impact 
Three distinct user-visible failures follow from the single stuck task: 
Dock is dead. pciehp’s IRQ thread blocks in pciehp_unconfigure_device() waiting 
on the same device_lock; the
Thunderbolt PCI rescan worker (tb_pci_rescan_work_fn) then blocks behind 
pciehp. The tunnel is never completed, so
neither Ethernet nor USB on the dock ever appears.
Resume from hibernation fails and the image is discarded. freeze_processes() 
cannot freeze a task spinning in kernel
context, so resume aborts with PM: hibernation: resume failed (-16) and the 
machine continues as a fresh boot.
The hibernated session is lost.
Suspend and shutdown break for the rest of the session. Every subsequent s2idle 
attempt fails the same 20 s freeze timeout,
retrying roughly every 30 seconds. At shutdown, systemd-shutdown waits forever, 
because the task responds to neither
SIGTERM nor SIGKILL. 
Environment 
Kernel: 7.0.0-28-generic (Ubuntu)
Machine: Lenovo ThinkPad X1 Carbon Gen 10 (Alder Lake)
Dock: CalDigit TS3 Plus, Thunderbolt 3
NIC: Intel I210 (dock-provided; the laptop has no built-in Ethernet)
Thunderbolt device is enrolled and authorized (boltctl: stored, policy iommu)
ACPI: PM: (supports S0 S4 S5) — s2idle and hibernate only, no S3
Thunderbolt pre-boot support enabled in BIOS at time of failure 
Reproduction 
Intermittent; it is a race, and most boots succeed. 
Attach the CalDigit TS3 Plus.
Boot, or resume from hibernation, with the dock attached.
Occasionally the dock’s Ethernet and USB never appear. When that happens, ps 
-eo(udev-worker) and the hung-task detector reports irq/NNN-pciehp blocked. 
pid,stat,comm shows a long-lived
Suspected cause 
drivers/net/ethernet/intel/igb/e1000_i210.c: 
void igb_release_swfw_sync_i210(struct e1000_hw *hw, u16 mask)
{
u32 swfw_sync;

 while (igb_get_hw_semaphore_i210(hw))
; /* Empty */
...
}

igb_get_hw_semaphore_i210() busy-waits with udelay(50) for a bounded number of 
iterations and then returns an error — but
the caller above simply retries, without limit, and has a void return so it has 
no way to report failure.On a disconnected device this is an unbounded loop by 
construction. It is not a hang on dead I/O that a timeout would eventually 
clear;
the task remains runnable and burns a CPU core. 
Note that the same loop appears unchanged across a wide range of kernel 
versions, including current mainline. 
Suggested direction 
Bound the retry loop, and/or bail out when the device is gone — e.g. check 
pci_dev_is_disconnected() or detect an all-ones read
— so that igb_probe() can fail cleanly and release device_lock, allowing pciehp 
to complete removal of the vanished slot. 
Logs 
PCIe link drops during device init 
kernel: pcieport 0000:00:07.0: pciehp: Slot(3): Link Down
kernel: pcieport 0000:00:07.0: pciehp: Slot(3): Card not present
kernel: xhci_hcd 0000:23:00.0: xHCI host controller not responding, assume dead
kernel: xhci_hcd 0000:23:00.0: HC died; cleaning up
kernel: xhci_hcd 0000:22:00.0: xHCI host controller not responding, assume dead
kernel: xhci_hcd 0000:22:00.0: HC died; cleaning up
kernel: xhci_hcd 0000:24:00.0: xHCI host controller not responding, assume dead
kernel: xhci_hcd 0000:24:00.0: HC died; cleaning up

Hibernate resume aborts because the task cannot be frozen 
kernel: Freezing user space processes
kernel: Freezing user space processes failed after 20.003 seconds (1 tasks 
refusing to freeze, wq_busy=0):
kernel: task:(udev-worker) state:R running task stack:0 pid:260 tgid:260 
ppid:237
...
kernel: PM: Image signature found, resuming
kernel: PM: hibernation: resume from hibernation
kernel: PM: hibernation: resume failed (-16)

Stack of the spinning task 
kernel: RIP: 0010:delay_halt_tpause+0x1a/0x30
kernel: delay_halt.part.0+0x3e/0x70
kernel: delay_halt+0x13/0x30
kernel: __const_udelay+0x3d/0x50
kernel: igb_get_hw_semaphore_i210+0x32/0x190 [igb]
kernel: igb_release_swfw_sync_i210+0x1a/0x60 [igb]
kernel: igb_release_phy_82575+0x40/0x50 [igb]
kernel: igb_read_phy_reg_82580+0x4b/0x60 [igb]
kernel: igb_setup_copper_link+0xa3/0x220 [igb]
kernel: igb_setup_copper_link_82575+0x111/0x200 [igb]
kernel: igb_setup_link+0x5a/0x2a0 [igb]
kernel: igb_init_hw_82575+0xce/0x1f0 [igb]
kernel: igb_reset+0x175/0x560 [igb]
kernel: igb_probe+0x8a6/0x13c0 [igb]
kernel: local_pci_probe+0x47/0xb0
kernel: pci_call_probe+0x5e/0x1a0
kernel: pci_device_probe+0xa9/0x150
kernel: call_driver_probe+0x29/0x120
kernel: really_probe+0xe3/0x340
kernel: __driver_probe_device+0x9f/0x1d0
kernel: driver_probe_device+0x24/0xd0
kernel: __driver_attach+0x10b/0x240
kernel: bus_for_each_dev+0x8c/0xf0
kernel: driver_attach+0x1e/0x30
kernel: bus_add_driver+0x160/0x2a0
kernel: driver_register+0x5e/0x130
kernel: __pci_register_driver+0x5e/0x70
kernel: igb_init_module+0x59/0xff0 [igb]
kernel: do_one_initcall+0x5f/0x360
kernel: do_init_module+0x97/0x2c0
kernel: load_module+0x9f4/0xb20kernel:kernel:kernel:kernel:kernel:
init_module_from_file+0x153/0x160
idempotent_init_module+0x10f/0x300
__x64_sys_finit_module+0x73/0xf0
do_syscall_64+0xd9/0x5b0
entry_SYSCALL_64_after_hwframe+0x76/0x7e
Resulting lock chain 
kernel: INFO: task irq/123-pciehp:172 blocked for more than 860 seconds.
kernel: task:irq/123-pciehp state:D stack:0 pid:172 tgid:172 ppid:2
kernel: pciehp_unconfigure_device+0x97/0x180
kernel: pciehp_disable_slot+0x68/0x140
kernel: pciehp_handle_presence_or_link_change+0x74/0x4c0
kernel: pciehp_ist+0x1a3/0x290
kernel: INFO: task irq/123-pciehp:172 is blocked on a mutex likely owned by 
task (udev-worker):260.
kernel: Workqueue: thunderbolt0 tb_pci_rescan_work_fn [thunderbolt]
kernel: tb_pci_rescan_work_fn+0x12/0x40 [thunderbolt]
kernel: INFO: task kworker/u80:11:1433 is blocked on a mutex likely owned by 
task irq/123-pciehp:172.

IRQ 123 corresponds to pcieport 0000:00:07.0, the Thunderbolt root port: 
kernel: pcieport 0000:00:07.0: PME: Signaling with IRQ 123

Repeated suspend failures for the remainder of the session 
kernel: PM: suspend entry (s2idle)
kernel: Freezing user space processes
kernel: Freezing user space processes failed after 20.004 seconds (3 tasks 
refusing to freeze, wq_busy=0):
kernel: PM: suspend exit

(repeating roughly every 30 seconds, task count rising from 1 to 3) 
Shutdown never completes 
systemd-shutdown[1]: Sending SIGTERM to remaining processes...
systemd-shutdown: waiting for process: 269 ((udev-worker)), 4484 (tlp), 1538 
(tlp)

Filesystems were unmounted and synced cleanly before this point; only the final 
process-reaping phase hangs. A hard power-off is
required, and a warm reboot does not clear the Thunderbolt controller state

ProblemType: Bug
DistroRelease: Ubuntu 24.04
Package: linux-image-7.0.0-28-generic 7.0.0-28.28~24.04.1
ProcVersionSignature: Ubuntu 7.0.0-28.28~24.04.1-generic 7.0.12
Uname: Linux 7.0.0-28-generic x86_64
ApportVersion: 2.28.2-0ubuntu0.1
Architecture: amd64
CasperMD5CheckResult: unknown
CurrentDesktop: ubuntu:GNOME
Date: Fri Jul 31 11:13:47 2026
DistributionChannelDescriptor:
 # This is the distribution channel descriptor for the OEM CDs
 # For more information see http://wiki.ubuntu.com/DistributionChannelDescriptor
 canonical-oem-sutton-focal-amd64-20220425-68+sutton-focal-amd64+X02
InstallationDate: Installed on 2022-05-10 (1543 days ago)
InstallationMedia: Ubuntu 20.04 "Focal" - Build amd64 LIVE Binary 20220425-07:09
IwConfig:
 lo        no wireless extensions.
 
 enp37s0   no wireless extensions.
 
 lxcbr0    no wireless extensions.
MachineType: LENOVO 21CBCTO1WW
ProcEnviron:
 LANG=en_US.UTF-8
 PATH=(custom, no user)
 SHELL=/usr/bin/bash
 TERM=xterm-256color
 XDG_RUNTIME_DIR=<set>
ProcFB: 0 i915drmfb
ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-7.0.0-28-generic 
root=UUID=b552fd18-72d9-41e4-b7c7-631684e58d29 ro 
resume=UUID=b552fd18-72d9-41e4-b7c7-631684e58d29 resume_offset=7682048 
crashkernel=2G-4G:320M,4G-32G:512M,32G-64G:1024M,64G-128G:2048M,128G-:4096M
PulseList: Error: command ['pacmd', 'list'] failed with exit code 1: No 
PulseAudio daemon running, or not running as session daemon.
RelatedPackageVersions:
 linux-restricted-modules-7.0.0-28-generic N/A
 linux-backports-modules-7.0.0-28-generic  N/A
 linux-firmware                            20240318.git3b128b60-0ubuntu2.27
RfKill:
 0: tpacpi_bluetooth_sw: Bluetooth
        Soft blocked: no
        Hard blocked: no
SourcePackage: linux-hwe-7.0
UpgradeStatus: Upgraded to noble on 2024-09-10 (689 days ago)
dmi.bios.date: 04/20/2026
dmi.bios.release: 1.55
dmi.bios.vendor: LENOVO
dmi.bios.version: N3AET90W (1.55 )
dmi.board.asset.tag: Not Available
dmi.board.name: 21CBCTO1WW
dmi.board.vendor: LENOVO
dmi.board.version: Not Defined
dmi.chassis.asset.tag: No Asset Information
dmi.chassis.type: 10
dmi.chassis.vendor: LENOVO
dmi.chassis.version: None
dmi.ec.firmware.release: 1.26
dmi.modalias: 
dmi:bvnLENOVO:bvrN3AET90W(1.55):bd04/20/2026:br1.55:efr1.26:svnLENOVO:pn21CBCTO1WW:pvrThinkPadX1CarbonGen10:rvnLENOVO:rn21CBCTO1WW:rvrNotDefined:cvnLENOVO:ct10:cvrNone:skuLENOVO_MT_21CB_BU_Think_FM_ThinkPadX1CarbonGen10:pfaThinkPadX1CarbonGen10:
dmi.product.family: ThinkPad X1 Carbon Gen 10
dmi.product.name: 21CBCTO1WW
dmi.product.sku: LENOVO_MT_21CB_BU_Think_FM_ThinkPad X1 Carbon Gen 10
dmi.product.version: ThinkPad X1 Carbon Gen 10
dmi.sys.vendor: LENOVO

** Affects: linux-hwe-7.0 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: amd64 apport-bug noble

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

Title:
  igb: unbounded retry loop in igb_release_swfw_sync_i210() during probe
  deadlocks pciehp and breaks hibernate resume

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


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

Reply via email to