summaryrefslogtreecommitdiff
path: root/kernel-devel
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2019-01-30 22:51:17 +0100
committerJohn Ogness <john.ogness@linutronix.de>2019-01-31 09:38:59 +0106
commit47bdb292724c50decd90471615b2d65c1eee7374 (patch)
treed67e8524040f23dacbb5a212058a22ebb6c05243 /kernel-devel
parentc39833864d7a077e038d10ec787b56fea8c32ebe (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/Kconfig1
-rw-r--r--kernel-devel/klist/Kconfig5
-rw-r--r--kernel-devel/klist/Makefile1
-rw-r--r--kernel-devel/klist/pres_klist_en.tex93
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}