diff options
Diffstat (limited to 'misc')
| -rw-r--r-- | misc/Kconfig | 7 | ||||
| -rw-r--r-- | misc/Makefile | 1 | ||||
| -rw-r--r-- | misc/pres_printk_en.tex | 123 |
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} |
