> Does freeze_processes() / unfreeze_processes() solve this by only
> freezing processes that have voluntarily scheduled (opposed to just
> being preempted)?
It goes much much further than that. Those processes need to actually
perform an explicit call to try_to_freeze().