version 1.1, 2011/11/10 03:06:51
|
version 1.4, 2017/01/03 20:51:24
|
Line 10 contact="""
|
Line 10 contact="""
|
|
|
category="kernel" |
category="kernel" |
difficulty="hard" |
difficulty="hard" |
funded="The NetBSD Foundation" |
|
|
|
description=""" |
description=""" |
This project proposal is a subtask of [[smp_networking]] and is elegible |
This project proposal is a subtask of [[smp_networking]]. |
for funding independently. |
|
|
|
The goal of this project is to implement continuations at the kernel level. |
The goal of this project is to implement continuations at the kernel level. |
Most of the pieces are already available in the kernel, so this can be |
Most of the pieces are already available in the kernel, so this can be |
reworded as: combine *callouts*, *softints*, and *workqueues* into a single |
reworded as: combine *callouts*, *softints*, and *workqueues* into a single |
framework. Continuations are meant to cheap; very cheap. |
framework. Continuations are meant to be cheap; very cheap. |
|
|
|
These continuations are a dispatching system for making callbacks at |
|
scheduled times or in different thread/interrupt contexts. |
|
They aren't "continuations" in the usual sense such as you might find |
|
in Scheme code. |
|
|
Please note that the main goal of this project is to simplify the |
Please note that the main goal of this project is to simplify the |
implementation of [[SMP networking|smp_networking]], so care must be taken |
implementation of [[SMP networking|smp_networking]], so care must be taken |
Line 158 specific kernel thread.
|
Line 161 specific kernel thread.
|
following flag(s) may be bitwise ORed together: |
following flag(s) may be bitwise ORed together: |
|
|
* `WQ_PERCPU` specifies that the workqueue should have a separate queue |
* `WQ_PERCPU` specifies that the workqueue should have a separate queue |
for each CPU, thus allowing continuations to invoked on specific CPUs. |
for each CPU, thus allowing continuations to be invoked on specific CPUs. |
|
|
* `int kcont_workqueue_release(kcont_wq_t *wq);` |
* `int kcont_workqueue_release(kcont_wq_t *wq);` |
|
|