DF-4311 / fix.log
DF-4311 fix validation run (patched kernel modules, same guest image) ===================================================================== Applied fix.diff to guest /usr/src, rebuilt vga_switcheroo.ko with the MOD_UNLOAD guard + MOD_SHUTDOWN split, rebuilt uaftrig.ko with MODULE_DEPEND(uaftrig, vga_switcheroo, 1, 1, 1) (models the MODULE_DEPEND(drm/i915/amdgpu, vga_switcheroo, ...) hunks of fix.diff). Commands (as root): kldload /root/vgafixed/vga_switcheroo.ko kldload /root/uaftrig/uaftrig.ko echo trigger > /dev/uaftrig # baseline kldunload vga_switcheroo # attempt while dependent loaded kldstat echo trigger-after > /dev/uaftrig # previously PANICKED the kernel kldunload uaftrig # chained real unload kldstat Output (verbatim): load vga(fixed) rc=0 load uaftrig(deps) rc=0 baseline rc=0 uaftrig: vga_switcheroo_lock_ddc(NULL) = -19 uaftrig: vga_switcheroo_unlock_ddc(NULL) = -19 --- unload attempt (expect: NO real unload; ref drop) --- kldunload rc=0 2 1 0xffffffff81cd9000 7c288 ehci.ko 3 1 0xffffffff82600000 ... xhci.ko 4 1 0xffffffff82600000 2000 vga_switcheroo.ko <-- STILL RESIDENT 5 1 0xffffffff82602000 1000 uaftrig.ko --- trigger after unload attempt --- trigger rc=0 uaftrig: vga_switcheroo_lock_ddc(NULL) = -19 <-- NO PANIC uaftrig: vga_switcheroo_unlock_ddc(NULL) = -19 --- full cleanup: unload uaftrig then vga --- uaftrig unload rc=0 kldunload: can't find file vga_switcheroo: No such file or directory vga unload#2 rc=1 <-- already chained-unloaded 1 5 0xffffffff80200000 1ad8538 kernel 2 1 0xffffffff81cd9000 7c288 ehci.ko 3 1 0xffffffff81d56000 8c778 xhci.ko <-- both gone, clean uaftrig: vga_switcheroo_unlock_ddc(NULL) = -19 vga_switcheroo device unloaded Result: baseline panic-op now returns -19/-19 with the guest fully alive; the dependent module keeps vga_switcheroo resident (kldstat id 4); the true unload happens automatically only after the last dependent (uaftrig) unloads, via the linker dependency chain (kern_linker.c linker_load_dependencies -> refs++ -> unload drops ref). FIX VALIDATED: fixed (baseline reproduced pre-fix, patched run clean).