Page MenuHomeFreeBSD

callout(9): Allow spin locks use with callout_init_mtx()
ClosedPublic

Authored by mav on Sep 2 2021, 12:02 AM.
Tags
None
Referenced Files
F122513663: D31778.id.diff
Sat, Jul 5, 10:01 PM
F122438493: D31778.id94521.diff
Sat, Jul 5, 8:42 AM
Unknown Object (File)
Tue, Jul 1, 9:03 PM
Unknown Object (File)
Tue, Jul 1, 1:41 PM
Unknown Object (File)
Mon, Jun 30, 9:14 PM
Unknown Object (File)
Sun, Jun 29, 1:48 PM
Unknown Object (File)
Sun, Jun 29, 7:19 AM
Unknown Object (File)
Tue, Jun 24, 10:14 AM
Subscribers
None

Details

Summary

Implement lock_spin()/unlock_spin() lock class methods, moving the assertion to _sleep() instead. Change assertions in callout(9) to allow spin locks for both regular and C_DIRECT_EXEC cases. In case of C_DIRECT_EXEC spin locks are the only locks allowed.

As the first use case allow taskqueue_enqueue_timeout() use on fast task queues. It actually becomes more efficient due to avoided extra context switches in callout(9) thanks to C_DIRECT_EXEC.

Test Plan

Simple test using taskqueue_enqueue_timeout() on fast task queue, including recursively, successfully passes on debug kernel.

Diff Detail

Lint
Lint Skipped
Unit
Tests Skipped

Event Timeline

mav requested review of this revision.Sep 2 2021, 12:02 AM
mav created this revision.

I like this idea and wouldn't object to it.

This revision is now accepted and ready to land.Sep 2 2021, 7:51 AM

Minor tuning to unlock_spin().

This revision now requires review to proceed.Sep 2 2021, 2:01 PM
This revision is now accepted and ready to land.Sep 2 2021, 3:06 PM