Page MenuHomeFreeBSD

x86: New (un)idle IPIs for setting idle flag in scheduler
AbandonedPublic

Authored by obiwac on Dec 29 2025, 8:59 PM.
Tags
None
Referenced Files
F175736529: D54409.diff
Mon, Oct 12, 10:06 PM
F175716869: D54409.id168742.diff
Mon, Oct 12, 6:10 PM
F175690536: D54409.diff
Mon, Oct 12, 1:37 PM
Unknown Object (File)
Sun, Oct 11, 6:53 PM
Unknown Object (File)
Sat, Oct 10, 10:20 AM
Unknown Object (File)
Thu, Oct 8, 10:46 PM
Unknown Object (File)
Mon, Oct 5, 1:11 AM
Unknown Object (File)
Sat, Sep 19, 8:51 AM
Subscribers

Details

Reviewers
olce
markj
Summary

For s2idle, we need a reliable way to force the scheduler into an idle loop. This adds IPIs we can send to specific CPU sets to idle or unidle them.

If I were 100% sure the CPUs wouldn't get any other kinds of IPIs during the s2idle loop, we could probably do away with the extra unidle IPI and just "kick" the CPUs with a preempt or something to clear their scheduler idle flags. But for now this guarantees things will work.

This is a bit heavy-handed and not necessarily the right approach - revision opened mostly so @olce can have a look :)

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 69513
Build 66396: arc lint + arc unit

Event Timeline

Can totally use smp_rendezvous_cpus() for this instead of adding 2 new IPIs. I thought I had run into a problem using rendezvous when I first implemented this, but I just tried it again and see no problem doing it this way.

Can totally use smp_rendezvous_cpus() for this instead of adding 2 new IPIs. I thought I had run into a problem using rendezvous when I first implemented this, but I just tried it again and see no problem doing it this way.

So this is as we discussed. Great.