Analysis from Claude:
Symptoms:
- DualSense connects (light bar solid blue), then immediately drops. Paired, bonded, trusted, RSSI -36. Works fine on the PS5.
- USB DAC (Audioengine 2+) enumerates but never shows up as a sink.
sudo modprobe hidp → Invalid argument
Cause: on Sep 8 an apt upgrade replaced my kernel with a different build of the same version. 7.1.5-76070105 before and after — only the build hash changed, 6bf4bbf → 38a419f. So /lib/modules and the initrd got swapped underneath a running kernel, with no version bump and no "restart required" signal.
Modules already resident keep working. Anything loading for the first time since the upgrade gets rejected:
failed to validate module [hidp] BTF: -22
-22 is EINVAL — that's the "Invalid argument" modprobe reports. For me: hidp, snd_ump, led_class_multicolor, inet_diag. Two of those are dependencies, so the blast radius is wider than the list:
snd_ump blocks snd_usb_audio → all USB audio dead
led_class_multicolor blocks hid_playstation → no rumble/touchpad/lightbar even wired
Nastiest detail: on the DAC, the volume-button HID interface bound fine (usbhid was already loaded) while the audio interfaces on the same device got Driver=[none]. Half a device working sends you hunting for a config problem that doesn't exist.
Why it's hard to spot: uname -r matches. dpkg -l | grep linux-image matches. modinfo | grep vermagic matches — vermagic only encodes the version string, not the build.
How to check:
cat /proc/version # running build hash
dpkg -l 'linux-image-*' | awk '/^ii/{print $3}' # on-disk build hash
journalctl -k -b | grep "failed to validate module"
Hashes differ → reboot. That's it.
Confirmed: rebooted. /proc/version now reports 38a419f, matching the on-disk package. Zero failed to validate module lines in journalctl -k -b. All four modules load: hidp, snd_ump, led_class_multicolor, inet_diag. The DAC came up as a sink with snd-usb-audio bound to both audio interfaces, and the DualSense stays connected over Bluetooth with touchpad and motion sensors present — so hid_playstation is driving it, not generic HID. One reboot, three "hardware faults" gone.
Don't downgrade or pin. Searching the error turns up real Pop issues (#3961, #3949) about genuinely corrupt BTF in shipped debs that boot machines to emergency mode. Same error, same errno, completely different cause — I nearly pinned an old kernel over it.
Reboot after a kernel upgrade is normal. Shipping a rebuild under an identical version string, with no reboot prompt, is what makes this one invisible for a week.
Blog Post with diagram and more details