Introduction to the concept of completion
This section will briefly describe completion and the necessary part of its API that the DMA transfer uses. For a complete description, feel free to have a look at the kernel documentation at Documentation/scheduler/completion.txt
. In kernel programming, a typical practice is to start some activity outside of the current thread and then wait for it to finish. Completions are good alternatives to waitqueues or sleeping APIs while waiting for a very commonly occurring process to complete. Completion variables are implemented using wait queues, with the only difference being that they make the developer's life easier as it does not require the wait queue to be maintained, which makes it very easy to see the intent of the code.
Working with completion requires this header:
#include <linux/completion.h>
A completion variable is represented in the kernel as an instance of struct completion structures that can be initialized statically...