[FE training-materials-updates] kernel: introduce devm_ functions earlier
Michael Opdenacker
michael.opdenacker at free-electrons.com
Tue Nov 29 18:48:10 CET 2016
Repository : git://git.free-electrons.com/training-materials.git
On branch : master
Link : http://git.free-electrons.com/training-materials/commit/?id=5a360f1b5c54f9f20240d1ffdf87a863dba35e58
>---------------------------------------------------------------
commit 5a360f1b5c54f9f20240d1ffdf87a863dba35e58
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date: Tue Nov 29 18:48:10 2016 +0100
kernel: introduce devm_ functions earlier
- Was needed earlier in the labs anyway
Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>
>---------------------------------------------------------------
5a360f1b5c54f9f20240d1ffdf87a863dba35e58
.../kernel-driver-development-memory.tex | 16 ++++-----
slides/kernel-frameworks2/kernel-frameworks2.tex | 39 ++++++++++++++++++++++
slides/kernel-input/kernel-input.tex | 25 +++++---------
3 files changed, 54 insertions(+), 26 deletions(-)
diff --git a/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex b/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
index 3aed854..c5e431c 100644
--- a/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
+++ b/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
@@ -324,23 +324,19 @@ kfree(work);
\end{itemize}
\end{frame}
-\begin{frame}[fragile]
+\begin{frame}
\frametitle{devm\_ kmalloc functions}
- \footnotesize
+ Allocations with automatic freeing when the corresponding device or module is unprobed.
\begin{itemize}
- \item Automatically free the allocated buffers when the
- corresponding device or module is unprobed.
- \item Need to have a reference to a \kstruct{device}.
+ \scriptsize
\item \mint{c}+void *devm_kmalloc(struct device *dev, size_t size, int flags);+
\item \mint{c}+void *devm_kzalloc(struct device *dev, size_t size, int flags);+
\item \mint{c}+void *devm_kcalloc(struct device *dev, size_t n, size_t size, gfp_t flags);+
\item \mint{c}+void *devm_kfree(struct device *dev, void *p);+
- \begin{itemize}
- \item Useful to immediately free an allocated buffer
- \end{itemize}
+ Useful to immediately free an allocated buffer
\end{itemize}
- See \kerneldoc{driver-model/devres.txt} for details about managed
- device resources.
+ \normalsize
+ For use in \code{probe()} functions.
\end{frame}
\begin{frame}[fragile]
diff --git a/slides/kernel-frameworks2/kernel-frameworks2.tex b/slides/kernel-frameworks2/kernel-frameworks2.tex
index ff29e25..902f733 100644
--- a/slides/kernel-frameworks2/kernel-frameworks2.tex
+++ b/slides/kernel-frameworks2/kernel-frameworks2.tex
@@ -492,6 +492,45 @@ static int serial_imx_remove(struct platform_device *pdev)
\end{columns}
\end{frame}
+\begin{frame}
+ \frametitle{Device Model: per device allocations (1)}
+ \begin{itemize}
+ \item With the Device Model, structures need to be allocated
+ {\bf for each new device}.
+ \item Such structures then need to be released:
+ \begin{itemize}
+ \item When the module is removed,
+ \item When devices are removed (on a bus
+ which can detect this),
+ \item In the \code{probe()} routine, before
+ returning after a failure.
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Device Model: per device allocations (2)}
+ \code{devm_()} functions have been introduced
+ to help managing such allocations.
+ \begin{itemize}
+ \item They now exist in many parts of the kernel
+ \item Allocations are now attached to a \code{struct device}
+ structure.
+ \item Example: call to \kfunc{devm_kzalloc} in the
+ previous example.
+ \item Before each device is destroyed, the resources attached to it
+ are automatically freed. This is not limited to memory
+ allocation. This can also apply to registration of interrupts,
+ for example.
+ \item This greatly simplifies \code{remove()} functions and
+ error management code.
+ \item We will see many \code{devm_} functions in the subsystems
+ that we will study.
+ \end{itemize}
+ See \kerneldoc{driver-model/devres.txt} for implementation details
+ and available functions.
+\end{frame}
+
\begin{frame}[fragile]
\frametitle{Link Between Structures 3/4}
\begin{columns}
diff --git a/slides/kernel-input/kernel-input.tex b/slides/kernel-input/kernel-input.tex
index 1cf1efd..6d8faf9 100644
--- a/slides/kernel-input/kernel-input.tex
+++ b/slides/kernel-input/kernel-input.tex
@@ -57,11 +57,10 @@
\end{frame}
\begin{frame}[fragile]{Input subsystem API 1/3}
- \begin{itemize}
- \item An {\em input device} is described by a very long
- \kstruct{input_dev} structure, an excerpt is:
- \begin{block}{}
- \begin{minted}[fontsize=\tiny]{c}
+ An {\em input device} is described by a very long
+ \kstruct{input_dev} structure, an excerpt is:
+ \begin{block}{}
+ \begin{minted}[fontsize=\tiny]{c}
struct input_dev {
const char *name;
[...]
@@ -79,11 +78,9 @@ struct input_dev {
};
\end{minted}
\end{block}
-\item Before being used this struct must be allocated and initialized:
- \code{struct input_dev *input_allocate_device(void);}
-\item After unregistering \kstruct{input_dev}, it must be freed:
- \code{void input_free_device(struct input_dev *dev);}
- \end{itemize}
+ Before being used it, this structure must be allocated and
+ initialized, typically with:
+ \code{struct input_dev *devm_input_allocate_device(struct device *dev);}
\end{frame}
\begin{frame}[fragile]{Input subsystem API 2/3}
@@ -157,12 +154,8 @@ struct input_polled_dev {
\begin{frame}[fragile]{Polled input subsystem API}
\begin{itemize}
- \item Allocating/freeing the \kstruct{input_polled_dev} structure is
- done using
- \begin{itemize}
- \item \kfunc{input_allocate_polled_device}
- \item \kfunc{input_free_polled_device}
- \end{itemize}
+ \item Allocating the \kstruct{input_polled_dev} structure is
+ done using \kfunc{devm_input_allocate_polled_device}
\item Among the handlers of the \kstruct{input_polled_dev} only the
\code{poll()} method is mandatory, this function polls the device
and posts input events.
More information about the training-materials-updates
mailing list