mirror of
https://github.com/ps5-linux/ps5-linux-patches.git
synced 2026-07-16 01:50:38 +00:00
The PS5 GbE NIC has no INTx pin and its MSI sometimes never fires after a cold boot. The driver already works around that with a 1 Hz link-poll watchdog that kicks NAPI by hand. But gbe_poll() re-checks GBE_REG_ISR after completing NAPI and reschedules itself whenever a GBE_IER_MASK cause is still latched, without ever acknowledging (W1C) the ISR -- only the hardware handler gbe_isr() does. When the MSI is dead gbe_isr() never runs, so the latched cause (e.g. RX_DONE) is never cleared, the re-check stays true forever, and NAPI reschedules itself ~30k times/s, pinning ksoftirqd on that CPU at 100%. Acknowledge the pending causes before re-kicking so a stale, undelivered cause can no longer spin NAPI. While the MSI is dead also poll the rings every GBE_POLL_FALLBACK_MS (10 ms) instead of once per second, so interactive RX latency drops from ~1 s to a few ms; fall back to HZ as soon as real IRQs start arriving.
327 KiB
327 KiB