[FE training-materials-updates] Kernel slides: improve tasklet example
Michael Opdenacker
michael.opdenacker at free-electrons.com
Mon Jan 9 14:46:08 CET 2017
Repository : git://git.free-electrons.com/training-materials.git
On branch : master
Link : http://git.free-electrons.com/training-materials/commit/?id=03310ca59f818b3da279f3e1eab2db96e2f20640
>---------------------------------------------------------------
commit 03310ca59f818b3da279f3e1eab2db96e2f20640
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date: Mon Jan 9 14:46:08 2017 +0100
Kernel slides: improve tasklet example
- Chose another example that explains things better
Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>
>---------------------------------------------------------------
03310ca59f818b3da279f3e1eab2db96e2f20640
.../kernel-driver-development-interrupts.tex | 40 ++++++++++++++--------
1 file changed, 26 insertions(+), 14 deletions(-)
diff --git a/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex b/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex
index 766008e..6b47939 100644
--- a/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex
+++ b/slides/kernel-driver-development-interrupts/kernel-driver-development-interrupts.tex
@@ -240,37 +240,49 @@ int devm_request_threaded_irq(
\end{frame}
\begin{frame}[fragile]
- \frametitle{Tasklet Example: simplified atmel\_serial.c 1/2}
+ \frametitle{Tasklet Example: drivers/crypto/atmel-sha.c 1/2}
\begin{minted}[fontsize=\small]{c}
/* The tasklet function */
-static void atmel_tasklet_func(unsigned long data) {
- struct uart_port *port = (struct uart_port *)data;
+static void atmel_sha_done_task(unsigned long data)
+{
+ struct atmel_sha_dev *dd = (struct atmel_sha_dev *)data;
[...]
}
-/* Registering the tasklet */
-init function(...) {
+/* Probe function: registering the tasklet */
+static int atmel_sha_probe(struct platform_device *pdev)
+{
+ struct atmel_sha_dev *sha_dd;
[...]
- tasklet_init(&atmel_port->tasklet,
- atmel_tasklet_func, (unsigned long)port);
+ platform_set_drvdata(pdev, sha_dd);
+ [...]
+ tasklet_init(&sha_dd->done_task, atmel_sha_done_task,
+ (unsigned long)sha_dd);
[...]
}
\end{minted}
\end{frame}
\begin{frame}[fragile]
- \frametitle{Tasklet Example: simplified atmel\_serial.c 2/2}
+ \frametitle{Tasklet Example: drivers/crypto/atmel-sha.c 2/2}
\begin{minted}[fontsize=\small]{c}
-/* Removing the tasklet */
-cleanup function(...) {
+/* Remove function: removing the tasklet */
+static int atmel_sha_remove(struct platform_device *pdev)
+{
+ static struct atmel_sha_dev *sha_dd;
+ sha_dd = platform_get_drvdata(pdev);
[...]
- tasklet_kill(&atmel_port->tasklet);
+ tasklet_kill(&sha_dd->done_task);
[...]
}
-/* Triggering execution of the tasklet */
-somewhere function(...) {
- tasklet_schedule(&atmel_port->tasklet);
+/* Interrupt handler: triggering execution of the tasklet */
+static irqreturn_t atmel_sha_irq(int irq, void *dev_id)
+{
+ struct atmel_sha_dev *sha_dd = dev_id;
+ [...]
+ tasklet_schedule(&sha_dd->done_task);
+ [...]
}
\end{minted}
\end{frame}
More information about the training-materials-updates
mailing list