[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