diff options
| author | Manuel Traut <manut@linutronix.de> | 2019-01-30 22:51:17 +0100 |
|---|---|---|
| committer | John Ogness <john.ogness@linutronix.de> | 2019-01-31 09:38:59 +0106 |
| commit | 47bdb292724c50decd90471615b2d65c1eee7374 (patch) | |
| tree | d67e8524040f23dacbb5a212058a22ebb6c05243 /kernel-devel | |
| parent | c39833864d7a077e038d10ec787b56fea8c32ebe (diff) | |
add klist slides
very basic version of slides for kernel lists
Signed-off-by: Manuel Traut <manut@linutronix.de>
Diffstat (limited to 'kernel-devel')
| -rw-r--r-- | kernel-devel/Kconfig | 1 | ||||
| -rw-r--r-- | kernel-devel/klist/Kconfig | 5 | ||||
| -rw-r--r-- | kernel-devel/klist/Makefile | 1 | ||||
| -rw-r--r-- | kernel-devel/klist/pres_klist_en.tex | 93 |
4 files changed, 100 insertions, 0 deletions
diff --git a/kernel-devel/Kconfig b/kernel-devel/Kconfig index 62d0fe9..513fe1c 100644 --- a/kernel-devel/Kconfig +++ b/kernel-devel/Kconfig @@ -15,4 +15,5 @@ if KERNEL source "kernel-devel/uio-driver/Kconfig" source "kernel-devel/kernel-perf/Kconfig" source "kernel-devel/dts/Kconfig" + source "kernel-devel/klist/Kconfig" endif diff --git a/kernel-devel/klist/Kconfig b/kernel-devel/klist/Kconfig new file mode 100644 index 0000000..4758e43 --- /dev/null +++ b/kernel-devel/klist/Kconfig @@ -0,0 +1,5 @@ +config KERNEL_KLIST + bool "Kernel klist papers" + default y + help + Papers about klist usage diff --git a/kernel-devel/klist/Makefile b/kernel-devel/klist/Makefile new file mode 100644 index 0000000..889e634 --- /dev/null +++ b/kernel-devel/klist/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_KERNEL_KLIST) += pres_klist_en.pdf diff --git a/kernel-devel/klist/pres_klist_en.tex b/kernel-devel/klist/pres_klist_en.tex new file mode 100644 index 0000000..29091cb --- /dev/null +++ b/kernel-devel/klist/pres_klist_en.tex @@ -0,0 +1,93 @@ +\input{configpres} + +\title{klist} +\maketitle + +\subsection{klist} + +\begin{frame} +\frametitle{Overview} +\tableofcontents +\end{frame} + +\subsubsection{What is it?} +\begin{frame} +\frametitle{klist functionality} +\begin{itemize} +\item Type oblivious - use with any data structure you have in mind +\item Doubly linked list +\item Iterations, etc. are easily readable +\end{itemize} +\end{frame} + +\subsubsection{Usage} +\begin{frame}[fragile] +\frametitle{Initialization} +\begin{lstlisting} +struct my_elem { + int member1; + long member2; + struct list_head node; +}; + +/* the following is the same as + * struct list_head mylist; + * INIT_LIST_HEAD(&mylist.list); + */ +LIST_HEAD(mylist); +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Add elements} +\begin{lstlisting} +struct my_elem *e; +while( .. ) { + e = kzalloc(sizeof(*e), GFP_KERNEL); + e->member1 = 3; + + /* add element to the beginning of the list */ + list_add(&e->node, &mylist); + + /* to add element to the tail of the list use + * list_add_tail(&e->node, &mylist); + */ +} +\end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{Iterate over list} +\begin{lstlisting} +struct my_elem *iterator, tmp; + +/* last argument is name of struct list_head inside mylist */ +list_for_each_entry(iterator, &mylist, node) { + iterator->member1 = 0x08; + iterator->member2 = 0x15; +} +\end{lstlisting} +\pause +\begin{lstlisting} +list_for_each_entry_reverse(iterator, &mylist, node) + iterator->member1 = 0x08; +\end{lstlisting} +\pause +\begin{lstlisting} +/* clear list and free elements + * _safe allows modificatio of the list during iteration + */ +list_for_each_entry_safe(iterator, tmp, &mylist, node) { + list_del(&iterator->node); + kfree(iterator); +} +\end{lstlisting} +\end{frame} + +\begin{frame} +\frametitle{There are a lot of helpers!} +see: include/linux/list.h +\end{frame} + +\input{tailpres} |
