diff options
Diffstat (limited to 'kernel-devel/klist/pres_klist_en.tex')
| -rw-r--r-- | kernel-devel/klist/pres_klist_en.tex | 93 |
1 files changed, 93 insertions, 0 deletions
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} |
