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)
Wed, Oct 23, 10:42 AM
Unknown Object (File)
Wed, Oct 23, 10:42 AM
Unknown Object (File)
Wed, Oct 23, 10:42 AM
Unknown Object (File)
Wed, Oct 23, 10:22 AM
Unknown Object (File)
Fri, Oct 18, 2:40 AM
Unknown Object (File)
Oct 1 2024, 8:44 AM
Unknown Object (File)
Oct 1 2024, 7:42 AM
Unknown Object (File)
Sep 27 2024, 11:29 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.