Page MenuHomeFreeBSD

reboot: Avoid unlocking Giant if the scheduler is stopped
ClosedPublic

Authored by markj on Nov 3 2023, 8:48 PM.
Tags
None
Referenced Files
Unknown Object (File)
Mon, May 11, 10:34 PM
Unknown Object (File)
Mon, May 11, 10:34 PM
Unknown Object (File)
Mon, May 11, 9:42 PM
Unknown Object (File)
Wed, Apr 29, 12:55 PM
Unknown Object (File)
Tue, Apr 28, 12:34 PM
Unknown Object (File)
Tue, Apr 28, 10:38 AM
Unknown Object (File)
Apr 23 2026, 4:40 AM
Unknown Object (File)
Apr 9 2026, 2:44 AM
Subscribers

Details

Summary

When the scheduler is stopped, mtx_unlock() turns into a no-op, so the
loop

    while (mtx_owned(&Giant))
	    mtx_unlock(&Giant);

runs forever if the calling thread has Giant locked.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

markj requested review of this revision.Nov 3 2023, 8:48 PM

No objection, but I wonder why we loop at all.

This revision is now accepted and ready to land.Nov 4 2023, 2:44 PM

No objection, but I wonder why we loop at all.

Giant is recursive, so it could in principle be held multiple times by the same thread.

I thought I'd hit accept yesterday this is fine. Crashes are super weird. I can't think of any other place we do this.. Giant really is special.