The idea of avoiding context switches by using memory regions to communicate with the kernel reminds me of FlexSC[0], which was a way to have "async" system calls and "flexible scheduling" of them.
[0]: https://www.usenix.org/legacy/events/osdi10/tech/full_papers...