wow - you have made really nice progress!
hm, shouldnt the make be frozen immediately?
doesnt the 'please freeze ASAP' flag get propagated to all tasks,
immediately? After that point any cloning activity should duplicate that
flag too, resulting in any new child freezing immediately too.
we could definitely do that - but i think it should be unnecessary: if
we mark all tasks as PF_FREEZING atomically, that should result in
_every_ task immediately dropping dead (once they get back from
TASK_UNINTERRUPTIBLE). No excuses. If there's some longer delay then
that can only be explained by some new cloned task/thread slipping
through the net somehow. (i.e. the PF_FREEZING flag not being duplicated
across fork?)
i'm wondering about how TASK_UNINTERRUPTIBLE tasks are handled by the
freezer: are they assumed frozen immediately, or do we wait until they
notice their PF_FREEZING and go into try_to_freeze()? I'd expect
TASK_UNINTERRUPTIBLE to be the largest source of latency. (and hence be
the primary source for freezing 'failures')
Ingo
-