[FE training-materials-updates] [git/training-materials] sysdev-4d: Mutexes: improve explanations (cce3bad)

Michael Opdenacker michael.opdenacker at free-electrons.com
Fri Dec 9 07:38:55 CET 2016


Repository : git://git.free-electrons.com/training-materials.git
On branch  : sysdev-4d
Link       : http://git.free-electrons.com/training-materials/commit/?id=cce3bad0cc4838bde16525f57a460f6593cf6e9e

>---------------------------------------------------------------

commit cce3bad0cc4838bde16525f57a460f6593cf6e9e
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date:   Fri Dec 9 07:38:55 2016 +0100

    Mutexes: improve explanations
    
    - With examples!
    
    Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>


>---------------------------------------------------------------

cce3bad0cc4838bde16525f57a460f6593cf6e9e
 .../kernel-driver-development-concurrency.tex      | 36 +++++++++++++++++++---
 1 file changed, 31 insertions(+), 5 deletions(-)

diff --git a/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex b/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex
index 421f934..15276e2 100644
--- a/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex
+++ b/slides/kernel-driver-development-concurrency/kernel-driver-development-concurrency.tex
@@ -39,15 +39,41 @@
     where sleeping is allowed.
   \item Mutex definition:
     \begin{itemize}
-    \item \mint{c}+#include <linux/mutex.h>+
+    \item \kstruct{mutex} type defined in \code{linux/mutex.h}
+    \item \kstruct{mutex} is typically embedded in a per-device
+      structure. Example:
+    \begin{minted}{c}
+#include <linux/mutex.h>
+struct atmel_pwm_chip {
+        void __iomem *base;
+        ...
+        struct mutex isr_lock;
+};
+    \end{minted}
     \end{itemize}
-  \item Initializing a mutex statically:
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Initializing Linux mutexes}
+  \begin{itemize}
+  \item Initializing a mutex dynamically
     \begin{itemize}
-    \item \mint{c}+DEFINE_MUTEX(name);+
+    \item \mint{c}+void mutex_init(struct mutex *lock);+
+    \item Typical example: initialization in a per-device structure
+      allocated in a \code{probe()} function:
+      \begin{minted}{c}
+atmel_pwm = devm_kzalloc(&pdev->dev, sizeof(*atmel_pwm),
+                         GFP_KERNEL);
+...
+mutex_init(&atmel_pwm->isr_lock);
+      \end{minted}
     \end{itemize}
-  \item Or initializing a mutex dynamically:
+  \item Initializing a mutex statically\\
+    (in cases when a global lock is sufficient):
     \begin{itemize}
-    \item \mint{c}+void mutex_init(struct mutex *lock);+
+    \item \mint{c}+DEFINE_MUTEX(name);+
     \end{itemize}
   \end{itemize}
 \end{frame}




More information about the training-materials-updates mailing list