summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/Kconfig7
-rw-r--r--misc/Makefile1
-rw-r--r--misc/pres_printk_en.tex123
3 files changed, 131 insertions, 0 deletions
diff --git a/misc/Kconfig b/misc/Kconfig
index 232f0e6..c7041cc 100644
--- a/misc/Kconfig
+++ b/misc/Kconfig
@@ -17,6 +17,13 @@ config MISC_MINICOREDUMPER
Presenation from the 2016 Tracing Summit on the
minicoredumper.
+config MISC_PRINTK
+ bool "printk: Real-Time Summit"
+ default n
+ help
+ Presenation from the 2018 Real-Time Summit on the
+ printk rework.
+
config MISC_BEST
bool "Best Practices"
default n
diff --git a/misc/Makefile b/misc/Makefile
index 2d6e321..2f9b38c 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -1,6 +1,7 @@
obj-$(CONFIG_MISC_XML) += pres_xml-fasttrack_en.pdf
obj-$(CONFIG_MISC_ZYNQ) += pres_zynq_en.pdf
obj-$(CONFIG_MISC_MINICOREDUMPER) += pres_minicoredumper_en.pdf
+obj-$(CONFIG_MISC_PRINTK) += pres_printk_en.pdf
obj-$(CONFIG_MISC_BEST) += pres_best_en.pdf
obj-$(CONFIG_MISC_IPC) += pres_ipc_en.pdf
obj-$(CONFIG_MISC_UPDATE) += pres_update.pdf
diff --git a/misc/pres_printk_en.tex b/misc/pres_printk_en.tex
new file mode 100644
index 0000000..f6e0640
--- /dev/null
+++ b/misc/pres_printk_en.tex
@@ -0,0 +1,123 @@
+\input{configpres}
+\date{2018-10-25}
+
+\section{printk}
+
+\title{Cleaning Up printk()}
+\author{John Ogness}
+
+\maketitle
+
+\newcommand\verbbf[1]{\textcolor[rgb]{0,0,0}{\textbf{#1}}}
+
+\subsection{printk: Issues}
+
+\begin{frame}[containsverbatim]
+\begin{itemize}
+\item global log buffer protected by \verb|raw_spinlock|
+\begin{itemize}
+\item disables interrupts
+\item not NMI safe
+\item not recursive safe
+\end{itemize}
+\item \verb|printk_safe|
+\begin{itemize}
+\item relies on \verb|irq_work|
+\item bogus timestamps
+\end{itemize}
+\item console drivers
+\begin{itemize}
+\item slow (serial, video, netconsole)
+\item executed by \verb|printk()| caller (possibly atomic)
+\end{itemize}
+\item INFO handled the same as EMERG
+\begin{itemize}
+\item \verb|BUG()| is worth the pain, but ''\verb|USB Video Class driver (1.1.1)|''?
+\end{itemize}
+\item last \verb|printk()| stuck with the bill
+\begin{itemize}
+\item it is not unbounded but it is a big wildcard
+\end{itemize}
+\item \verb|oops_in_progress| and \verb|bust_spinlocks()|
+\begin{itemize}
+\item um, yeah
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\subsection{printk: Proposal}
+
+\begin{frame}[containsverbatim]
+\begin{itemize}
+\item new static global lockless multi-reader multi-writer ring buffer
+\begin{itemize}
+\item interrupts never disabled
+\item NMI safe
+\item recursive safe
+\item available immediately
+\item obsoletes \verb|printk_safe| (log directly from \textbf{any} context)
+\end{itemize}
+\item grab timestamp as first line of \verb|printk()|
+\begin{itemize}
+\item accurate timestamps
+\end{itemize}
+\item create a single \verb|printk| kthread to handle printing to all consoles
+\begin{itemize}
+\item fully preemptible
+\item console driver pain goes away
+\end{itemize}
+\item introduce a \verb|write_atomic()| operation for consoles
+\begin{itemize}
+\item optional, NMI safe write implementation
+\end{itemize}
+\item introduce the concept of ''emergency messages''
+\begin{itemize}
+\item If a message is flagged for emergency and a console implements \verb|write_atomic()|, print the message for that console \textbf{directly}
+\item We are already sitting on the CPU! Use it!
+\item \verb|write_atomic()| for UART 8250 implemented as an example
+\end{itemize}
+\item add CPU ID to output to flag and sort messages
+\begin{itemize}
+\item simultaneous emergency/non-emergency messages
+\item simultaneous emergency messages
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\subsection{printk: Proposal: Issues}
+
+\begin{frame}[containsverbatim]
+\begin{itemize}
+\item messages printed out of order
+\begin{itemize}
+\item but timestamps have meaning
+\end{itemize}
+\item \verb|LOG_CONT| not yet implemented
+\begin{itemize}
+\item need to decide how best to implement it
+\end{itemize}
+\item the new ring buffer does not support dynamic resizing
+\begin{itemize}
+\item not looked into yet
+\end{itemize}
+\item vmcore data changes
+\begin{itemize}
+\item userspace ABI changes
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\subsection{}
+
+\begin{frame}[containsverbatim]
+\frametitle{Questions / Comments}
+Thank you for your attention!
+\vskip30pt
+\begin{Verbatim}[commandchars=\\\{\}]
+
+
+RCPT TO:<john.ogness@linutronix.de>
+\end{Verbatim}
+\end{frame}
+
+\end{document}