I used the DRM scheduler because I was told it was the right choice at the time, and because it handled the thread/workqueue stuff internally and there were no Rust workqueue abstractions at the time. Now it turns out that to make scheduler usage safe I would have to use workqueues inside my Rust abstraction anyway (and introduce a bunch of spurious extra references to ensure soundness), which is completely crazy.
Rust workqueue abstractions now exist, so the path forward is clear: ignore drm_sched and write my own scheduler in Rust using its own workqueue, without any of the lifetime craziness (and all the bugs it brings, I haven't even begun talking about the many internal drm_sched memory safety bugs affecting all drivers which I've been running into...).