Thus you should try to keep debug code to a minimum and make sure it does not show up in production code.
\section{Scheduling Tasks}
-\label{sec:orgb1eb02f}
-There are two main ways of running tasks: tasklets and work queues. Tasklets are a quick and easy way of scheduling a single function to be run, for example when triggered from an interrupt, whereas work queues are more complicated but also better suited to running multiple things in a sequence.
+\label{sec:scheduling_tasks}
+There are two main ways of running tasks: tasklets and work queues.
+Tasklets are a quick and easy way of scheduling a single function to be run, for example when triggered from an interrupt, whereas work queues are more complicated but also better suited to running multiple things in a sequence.
\subsection{Tasklets}
-\label{sec:org5b372fb}
-Here's an example tasklet module. The \emph{tasklet\_fn} function runs for a few seconds and in the mean time execution of the \emph{example\_tasklet\_init} function continues to the exit point.
+\label{sec:tasklet}
+Here is an example tasklet module.
+The \verb|tasklet_fn| function runs for a few seconds and in the mean time execution of the \verb|example_tasklet_init| function continues to the exit point.
\samplec{examples/example_tasklet.c}
\end{verbatim}
\subsection{Work queues}
-\label{sec:orgb4f6fbb}
-To add a task to the scheduler we can use a workqueue. The kernel then uses the Completely Fair Scheduler (CFS) to execute work within the queue.
+\label{sec:workqueue}
+To add a task to the scheduler we can use a workqueue.
+The kernel then uses the Completely Fair Scheduler (CFS) to execute work within the queue.
\samplec{examples/sched.c}