feat(install): udev reprobe rule recovers driverless devices at boot (#355) [HARDWARE-GATED]#372
feat(install): udev reprobe rule recovers driverless devices at boot (#355) [HARDWARE-GATED]#372BANANASJIM wants to merge 1 commit into
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…355) - Add generateReprobeRulesFromEntries -> 62-padctl-reprobe.rules: on add|bind of a supported VID:PID, reprobe the interface if it is still driverless (live `test -e /sys%p/driver` check; %p/%k substituted by udevd, matching the 61 driver-block rule). Root-scoped via udevd; coldplug-replayed at boot. - Wired into install after the 61 block rule; added to /lib and /etc cleanup. - Complements the install-time probeAndReprobeDrivers (immediate case). Defense-in-depth safety net only: on current main nothing leaves the interface driverless at boot (the usbhid-in-block_kernel_drivers regression was fixed in PR #362). Kept unmerged until a real-boot capture from an affected machine confirms a genuinely driverless interface.
195ace3 to
985c41c
Compare
|
Closing. Live |
Status after multi-agent review (2026-06-05)
Three independent reviewers + a real-hardware repro on the maintainer's Vader 5 concluded:
b76edee): the driverless-at-boot state was caused by padctl's own61-padctl-driver-block.rulesunbindingusbhidwhenblock_kernel_driversbriefly included it. Currentmainblocks onlyxpad, so nothing recreates the driverless precondition this rule assumes.usbhidbound to the 3 HID interfaces, 3 hidraw nodes present. The driverless state only reproduces by manually unbinding usbhid.padctl doctor.test -eguard).Kept open as a documented safety net for any future regression that genuinely leaves an interface driverless. Merge gate: a real-boot
padctl doctorcapture from an affected machine showing a supported interfacedriver -> (none)(truly driverless). If instead it showsusbhidbound + no hidraw, orhidraw present + daemon down, this is the wrong fix and should be closed.Change
generateReprobeRulesFromEntries→62-padctl-reprobe.rules(sorts after the 61 unbind). One rule per supported device:%p/%ksubstitution (filled by udevd, matching the proven 61 rule) — no reliance on shell env export. Live-checks the driver symlink at execution time, so only a still-driverless interface is reprobed./lib+/etccleanup lists. Keeps the install-timeprobeAndReprobeDrivers(hybrid).Test plan
add|bind,usb_interface,drivers_probetarget, live%pguard on every line); falsifiability verified (removing the guard fails the tests). CI green.udevadm monitor --udev+udevadm trigger --action=addon a driverless Vader interface must rebind usbhid and produce a hidraw node (udevadm testdoes NOT execute RUN, so it is not sufficient proof).Refs