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)
Thu, Apr 23, 4:40 AM
Unknown Object (File)
Thu, Apr 9, 2:44 AM
Unknown Object (File)
Tue, Mar 31, 1:46 AM
Unknown Object (File)
Mon, Mar 30, 7:31 PM
Unknown Object (File)
Mar 24 2026, 11:39 PM
Unknown Object (File)
Mar 23 2026, 3:36 AM
Unknown Object (File)
Mar 23 2026, 3:35 AM
Unknown Object (File)
Mar 15 2026, 7:59 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 Skipped
Unit
Tests Skipped
Build Status
Buildable 54273
Build 51163: arc lint + arc unit

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.