<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Josh Bialkowski (Posts about linux)</title><link>https://www.joshbialkowski.com/</link><description></description><atom:link type="application/rss+xml" rel="self" href="https://www.joshbialkowski.com/categories/linux.xml"></atom:link><language>en</language><copyright>Contents © 2018 &lt;a href="mailto:josh.bialkowski@gmail.com"&gt;Josh Bialkowski&lt;/a&gt; 
&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"&gt;
&lt;img alt="Creative Commons License" style="border-width:0"
 src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /&gt;
&lt;/a&gt;&lt;br /&gt;
This work is licensed under a
&lt;a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/"&gt;
Creative Commons Attribution-ShareAlike 4.0 International License&lt;/a&gt;.
</copyright><lastBuildDate>Tue, 20 Mar 2018 02:09:21 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Linux Zero Copy</title><link>https://www.joshbialkowski.com/posts/2018/linux_zero_copy/linux-zero-copy.html</link><dc:creator>Josh Bialkowski</dc:creator><description>&lt;div&gt;&lt;div class="section" id="purpose"&gt;
&lt;h2&gt;Purpose&lt;/h2&gt;
&lt;p&gt;The purpose of this document is to highlight some of the aspects of various
Linux subsystems (virtual memory, virtual file system) and how they relate
to storage subsystems (file systems and block device drivers).
Specifically, the goal is to provide enough information to intelligently design
inter-process communication and logging software.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="virtual-memory"&gt;
&lt;h2&gt;Virtual Memory&lt;/h2&gt;
&lt;p&gt;Much of this section is summarized from the very good introduction on
&lt;a class="reference external" href="https://www.tldp.org/LDP/tlk/mm/memory.html"&gt;The Linux Documentation Project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The virtual memory subsystem presents a view of system memory that is larger
than the physical memory available. In addition it provides a number of other
features:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Large address spaces&lt;/li&gt;
&lt;li&gt;Process isolation and protection&lt;/li&gt;
&lt;li&gt;Memory mapping of files or devices&lt;/li&gt;
&lt;li&gt;Allocation / division of physical memory&lt;/li&gt;
&lt;li&gt;Shared memory&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="section" id="abstract-model"&gt;
&lt;h3&gt;Abstract Model&lt;/h3&gt;
&lt;p&gt;The &lt;em&gt;address space&lt;/em&gt; of a process is the set of all addresses representable in a
pointer (i.e. a 32 or 64 bit word). In userspace, all memory accesses are made
against virtual addresses. A virtual address within the process address space is
translated to physical addresses by lookup tables managed
by the kernel. In order to keep these lookup tables efficient, they operate on
fixed sized regions of memory, one unit of which is called a &lt;em&gt;page&lt;/em&gt;. The lookup
tables are called &lt;em&gt;page tables&lt;/em&gt;. On x86 and arm the page size is 4kb
(4096 bytes).&lt;/p&gt;
&lt;p&gt;Virtual addresses are composed of two fields: &lt;em&gt;frame  number&lt;/em&gt; and &lt;em&gt;offset&lt;/em&gt;. The
frame number is the table entry used to lookup the physical page and the offset
is where within the physical page the address refers to.&lt;/p&gt;
&lt;div class="figure align-center" id="abstractmdl"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/abstract_vm_model.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/abstract_vm_model.svg&lt;/object&gt;
&lt;p class="caption"&gt;Abstract model of Virtual to Physical address mapping&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The page table keeps track of some metadata associated with each mapping:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Is this page table entry valid&lt;/li&gt;
&lt;li&gt;The physical page number this entry points to&lt;/li&gt;
&lt;li&gt;Access control: read, write, executable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The physical processor is able to use the page table that is managed by the
kernel. When a program attempts to access memory the processor will lookup the
physical page from the table and (if valid) complete the access operation. If
the table entry is not valid, it notifies the kernel by issuing a &lt;em&gt;page fault&lt;/em&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="demand-paging"&gt;
&lt;h3&gt;Demand Paging&lt;/h3&gt;
&lt;p&gt;Given that each process has it's own address space the amount of addressable
virtual memory in a multiprocess system can be much greater than the physical
memory. Linux implements a number of strategies to efficiently utilize this
limited physical memory. One of those strategies is demand paging of process
images.&lt;/p&gt;
&lt;p&gt;When a program (in ELF format) is first started, the ELF interpreter maps the
program file into memory at which point we refer to it as the process image.
This mapping is initially unresolved (except for the initial portion) in the
page table and physical memory is not yet dedicated to the process image.
Instead, pages are filled &lt;em&gt;on demand&lt;/em&gt; in response to page faults encountered as
the program image is accessed.&lt;/p&gt;
&lt;p&gt;When the processor encounters a memory access in the program flow (it may need
to fetch the next instruction, jump to a different instruction,
or fetch or write to memory) it resolves the virtual address
to a physical address through the processes page table. As mentioned above,
if there is no entry in the process page table for that virtual address
or if the entry is invalid the processor issues a &lt;em&gt;page fault&lt;/em&gt; and control
of the processor moves to the kernel.&lt;/p&gt;
&lt;p&gt;For example, in the figure above there is no entry in process
1's page table for virtual page frame number 2 and so if process 1 attempts
to read from an address within virtual page frame number 2 the processor
cannot translate the address into a physical one.&lt;/p&gt;
&lt;p&gt;If the virtual address of the access that induced the page fault is invalid,
then the program is trying to read or write to an address that it has not
configured. This is known as a segmentation fault. The kernel will signal the
program with &lt;tt class="docutils literal"&gt;SIGSEGV&lt;/tt&gt; and the program counter will jump to the signal handler
(usually resulting in process termination).&lt;/p&gt;
&lt;p&gt;If the virtual address of the access is valid but there is no physical page
backing it, the kernel must assign a physical page to that virtual page, and
then fill that page with the program contents read off from disk. In general
this is a time consuming process and so this is an opportunity for the scheduler
to service some other process on the processor that issued the fault. Once
the fetched page is copied to physical memory and an entry is added to the
page table, the process is restarted at the faulting instruction. This time the
virtual memory address is successfully translated to a physical address by the
processor and the program continues.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="shared-virtual-memory"&gt;
&lt;h3&gt;Shared Virtual Memory&lt;/h3&gt;
&lt;p&gt;Despite nominally providing process isolation, virtual memory provides the
facilities for processes to share memory. The same physical page of memory
may appear in multiple page tables. If it does, then that physical page of
memory will be shared between those two processes. Note that the virtual
address of that page within those two processes is generally not the same.&lt;/p&gt;
&lt;p&gt;There are several ways of getting the same physical page mapped into the
page table for two different processes:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;POSIX shared memory.&lt;/li&gt;
&lt;li&gt;System V shared memory&lt;/li&gt;
&lt;li&gt;A shared, anonymous memory map inherited through &lt;tt class="docutils literal"&gt;fork()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;A file-backed memory map on a common file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is in addition to (e.g. threads):&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;clone()&lt;/tt&gt; with flags indicating shared address space&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Details of these mechanisms are discussed in a later section.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="linux-page-cache"&gt;
&lt;h3&gt;Linux Page Cache&lt;/h3&gt;
&lt;p&gt;In general, all reads and writes to real files in Linux go through the Linux
page cache. This is a fundamental aspect of Linux performance and has
far-reaching implications, including some that we may exploit for optimization.&lt;/p&gt;
&lt;p&gt;The Linux page cache is an in-memory generally write-back/read-through cache
for file data. When data is read from a regular file it is first moved to page
cache, and then made available through the filesystem driver. When data is
written to a file, it is first copied to the page cache, and then flushed out
to storage at some point later.&lt;/p&gt;
&lt;p&gt;The purpose of the page cache is to speed up access to files on storage media.
Files are generally read in a page at a time and these pages are stored in the
page cache.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/page_hash_table.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/page_hash_table.svg&lt;/object&gt;
&lt;p class="caption"&gt;The Linux Page Cache&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Each file in Linux is identified by an data structure called an &lt;tt class="docutils literal"&gt;inode&lt;/tt&gt;, and
in Linux pretty much everything is a file (and so has an &lt;tt class="docutils literal"&gt;inode&lt;/tt&gt; associated
with it). When a page from a memory mapped file is read, it is processed through
the page cache. If the cache is hot the page is served out of the cache.
Otherwise a physical page is allocated and the filesystem or storage driver is
informed to fill the page.&lt;/p&gt;
&lt;p&gt;Pages filled in the page cache generally stay resident until something other
demand pushes them out. This is of particular note because, in general,
most of the physical memory is in use on Linux (by at least the page
cache).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="recovering-physical-memory"&gt;
&lt;h3&gt;Recovering physical memory&lt;/h3&gt;
&lt;p&gt;The Linux kernel attempts to keep a pool of physical memory available for
future use. The configurable behavior of this pool has two relative parameters:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;high water mark&lt;/li&gt;
&lt;li&gt;low water mark&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the amount of physical memory available is greater than the high water mark
then the kernel does nothing at all. Anything currently paged into the page
cache is left there indefinitely.&lt;/p&gt;
&lt;p&gt;Between the high water mark and low water mark the kernel begins to take action.
It will start to evict pages out of physical memory. Below the low water mark
the kernel gets more aggressive. The difference between the two is the number of
pages the kernel will try to free during each attempt.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/kswapd_watermarks.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/kswapd_watermarks.svg&lt;/object&gt;
&lt;p class="caption"&gt;&lt;em&gt;kswapd&lt;/em&gt; decision points. (a): with lots of physical memory available,
the swap daemon doesn't do anything. (b): when available memory drops
below the high water mark, the swap daemon attempts to free a couple
of pages per timer tick. (c): when available memory drops below the low
water mark, the daemon attempts to free more pages per tick.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The whole process is done by the a kernel thread called the kernel swap daemon
(&lt;em&gt;kswapd&lt;/em&gt;). It is serviced on a timer and at each service it looks at the number
of free pages and takes action.&lt;/p&gt;
&lt;p&gt;When the swap daemon decides to try and free memory it first looks for page
cache entries that can be discarded. It
does this by walking around the page cache and inspecting some fixed number of
pages at each iteration (clock algorithm), looking for any pages that can
be discarded. A page is discardable if the page is not mapped into any process
address space.&lt;/p&gt;
&lt;p&gt;If the swap daemon doesn't recover enough pages through discarding of disk
cache it will then attempt to swap out or discard mapped pages. It looks only
at processes that are swappable (some are not), and that have swappable pages.
A page can be &lt;em&gt;locked&lt;/em&gt; removing it from the candidate pool of swappable pages.
If disk swap is enabled, the swap daemon will consider swapping it out to
swap file only if it cannot be recovered in another way. Demand-paged program
storage, for instance, can be discarded without swapping because the data
can be read back from disk if it's needed again later. The swap daemon
will preferentially page out old pages versus those that were used recently.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="virtual-file-system"&gt;
&lt;h2&gt;Virtual File System&lt;/h2&gt;
&lt;p&gt;Again, much of this section is summarized from the very good introduction on
&lt;a class="reference external" href="https://www.tldp.org/LDP/tlk/fs/filesystem.html"&gt;The Linux Documentation Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Linux Virtual File system (VFS) allows the operating system to interact with
heterogeneous storage media utilizing a wide array of different filesystems.
Filesystem drivers in Linux translate VFS interactions to filesystem specific
interactions with the underlying storage media.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/virtual_filesystem.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/virtual_filesystem.svg&lt;/object&gt;
&lt;p class="caption"&gt;Schematic of the Linux virtual filesystem and caching.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The basic building block of the Linux VFS is the inode. Every file in the
filesystem is described by one and only one inode. They describe both the
contents and topology of the VFS. inodes and directory contents are cached in
the page cache like file contents, though these cache entries are not 1-1
mappings with data on the block-device of the storage medium. Rather, they are
translated by the filesystem driver when they are read in. Never-the-less, they
still are generally discardable cache entries as the data can always be restored
by reading back the relevant blocks of the underlying storage medium (through
the translation layer of the filesystem driver).&lt;/p&gt;
&lt;p&gt;A filesystem is basically two things:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;a specification for how file contents, metadata, and directory information
are laid out on a continuous storage medium&lt;/li&gt;
&lt;li&gt;a driver software which interprets this specification and provides a
consistent API for the kernel to interact with.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Storage media are block devices which are represented in Linux as files. Like
other files they get an inode representation in the VFS and reads and writes
to these files are cached in the page cache. When the filesystem driver reads
data from the block device to, for instance, enumerate inodes or directory
entries, the entire block is pulled into the page cache and then the exact
data needed is read, interpreted, and used to fill inode and directory
structures. These structures are themselves stored within pages
of memory pulled from the page cache pool and are subject to cache rules.&lt;/p&gt;
&lt;p&gt;Normally &lt;tt class="docutils literal"&gt;read()&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;write()&lt;/tt&gt; act similarly. When the userspace
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;read()s&lt;/span&gt;&lt;/tt&gt; data from a file, the filesystem driver copies data from the block
device into the userspace buffer for the read.&lt;/p&gt;
&lt;p&gt;Memory-mapped files are (potentially) dealt with a little differently. If the
file contents are stored page-aligned and byte-for-byte on the block device
(they are for a sane filesystem) then the filesystem driver can implement an
optimization informing the kernel to map the existing cache pages directly
into the process page table.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="process-memory"&gt;
&lt;h2&gt;Process Memory&lt;/h2&gt;
&lt;p&gt;The fundamental API with which a userspace program interacts with the kernel
virtual memory subsystem is through the &lt;a class="reference external" href="http://man7.org/linux/man-pages/man2/mmap.2.html"&gt;mmap(2)&lt;/a&gt; system call (and it's
&lt;tt class="docutils literal"&gt;glibc&lt;/tt&gt; wrapper function):&lt;/p&gt;
&lt;pre class="code c"&gt;&lt;a name="rest_code_441246f4aeb54e959bfd70bf63b6f1cf-1"&gt;&lt;/a&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nf"&gt;mmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;prot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a name="rest_code_441246f4aeb54e959bfd70bf63b6f1cf-2"&gt;&lt;/a&gt;           &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;fd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;off_t&lt;/span&gt; &lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a name="rest_code_441246f4aeb54e959bfd70bf63b6f1cf-3"&gt;&lt;/a&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;munmap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;addr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;From the Linux manual:&lt;/p&gt;
&lt;blockquote&gt;
&lt;tt class="docutils literal"&gt;mmap()&lt;/tt&gt; creates a new mapping in the virtual address space of the
calling process.  The starting address for the new mapping is
specified in addr.  The length argument specifies the length of the
mapping (which must be greater than &lt;tt class="docutils literal"&gt;0&lt;/tt&gt;).&lt;/blockquote&gt;
&lt;p&gt;&lt;tt class="docutils literal"&gt;mmap()&lt;/tt&gt; can be used to map the contents of a file into the process address
space. The process can then read from or write to the file by simply
dereferencing a pointer. In particular:&lt;/p&gt;
&lt;blockquote&gt;
The contents of a file mapping (as opposed to an anonymous mapping;
see &lt;tt class="docutils literal"&gt;MAP_ANONYMOUS&lt;/tt&gt; below), are initialized using &lt;tt class="docutils literal"&gt;length&lt;/tt&gt; bytes
starting at &lt;tt class="docutils literal"&gt;offset&lt;/tt&gt; in the file (or other object) referred to by the
file descriptor &lt;tt class="docutils literal"&gt;fd&lt;/tt&gt;.  &lt;tt class="docutils literal"&gt;offset&lt;/tt&gt; must be a multiple of the page size as
returned by sysconf(&lt;tt class="docutils literal"&gt;_SC_PAGE_SIZE&lt;/tt&gt;).&lt;/blockquote&gt;
&lt;p&gt;Of particular note is how program instructions are accessed, which was
introduced previously in the discussion on the virtual memory subsystem.
Consider the execution of a program in the Executable and Linker File (ELF)
format. When a program is executed with the &lt;a class="reference external" href="http://man7.org/linux/man-pages/man3/exec.3.html"&gt;exec(3)&lt;/a&gt; family of functions
(and the underlying system call) Linux will replace the current process image
with the system interpreter by mapping it into process address space and moving
the program counter to first address in the interpreter program. The
interpreter then maps the ELF file into memory, parses out some of the metadata,
and then jumps to the start of the program in the mapped file. We often refer
to the ELF file (as mapped into memory) as the program image. When the
interpreter maps this file into memory it does so as an executable read-only
mapping.&lt;/p&gt;
&lt;p&gt;Calling &lt;tt class="docutils literal"&gt;mmap()&lt;/tt&gt; with &lt;tt class="docutils literal"&gt;flags |= MAP_ANONYMOUS&lt;/tt&gt; is how a process maps
general purpose physical memory into it's address space. Specifically:&lt;/p&gt;
&lt;blockquote&gt;
The mapping is not backed by any file; its contents are
initialized to zero.  The fd argument is ignored; however,
some implementations require fd to be &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-1&lt;/span&gt;&lt;/tt&gt; if &lt;tt class="docutils literal"&gt;MAP_ANONYMOUS&lt;/tt&gt; (or
&lt;tt class="docutils literal"&gt;MAP_ANON&lt;/tt&gt;) is specified, and portable applications should
ensure this.  The offset argument should be zero.  The use of
&lt;tt class="docutils literal"&gt;MAP_ANONYMOUS&lt;/tt&gt; in conjunction with &lt;tt class="docutils literal"&gt;MAP_SHARED&lt;/tt&gt; is supported on
Linux only since kernel 2.4.&lt;/blockquote&gt;
&lt;p&gt;This is the underlying
mechanism of how memory allocators (i.e. &lt;tt class="docutils literal"&gt;malloc()&lt;/tt&gt;) work. They call
&lt;tt class="docutils literal"&gt;mmap()&lt;/tt&gt; to map physical pages into the process address space, then they add
additional metadata and various global data structures to provide a higher
level interface on top of that. Note that the &lt;tt class="docutils literal"&gt;glibc&lt;/tt&gt; implementation of
&lt;tt class="docutils literal"&gt;malloc()&lt;/tt&gt; never calls &lt;tt class="docutils literal"&gt;munmap()&lt;/tt&gt;. Any &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;free()ed&lt;/span&gt;&lt;/tt&gt; memory is kept mapped
for reuse in a later &lt;tt class="docutils literal"&gt;malloc()&lt;/tt&gt; call.&lt;/p&gt;
&lt;p&gt;Calling &lt;tt class="docutils literal"&gt;mmap()&lt;/tt&gt; with a file descriptor of an open file handle will
initialize the map with the contents of the file, starting at &lt;tt class="docutils literal"&gt;offset&lt;/tt&gt;.
Calling with &lt;tt class="docutils literal"&gt;flags |= MAP_SHARED&lt;/tt&gt; means that updates to the mapping are
visible to other processes with the same region mapped into their address
space, and (in the case of a file mapping), writes the the map are carried
through to the underlying file. Specifically:&lt;/p&gt;
&lt;blockquote&gt;
&lt;tt class="docutils literal"&gt;MAP_SHARED&lt;/tt&gt;
Share this mapping.  Updates to the mapping are visible to
other processes mapping the same region, and (in the case of
file-backed mappings) are carried through to the underlying
file.  (To precisely control when updates are carried through
to the underlying file requires the use of &lt;a class="reference external" href="http://man7.org/linux/man-pages/man2/msync.2.html"&gt;msync(2)&lt;/a&gt;.)&lt;/blockquote&gt;
&lt;p&gt;A shared mapping (whether anonymous or file-backed) allows the physical page
to reside in the page table for more than one process.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="process-shared-memory-without-the-posix-api"&gt;
&lt;h2&gt;Process shared memory without the &lt;tt class="docutils literal"&gt;posix&lt;/tt&gt; API&lt;/h2&gt;
&lt;p&gt;As mentioned above, there are several ways by which multiple process may share
memory. The most common mechanism is through the &lt;a class="reference external" href="http://man7.org/linux/man-pages/man7/shm_overview.7.html"&gt;posix shared memory API&lt;/a&gt;,
though there are others, such as the older (less performant) &lt;a class="reference external" href="http://man7.org/linux/man-pages/man2/shmget.2.html"&gt;System V API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One less used alternative is to share memory through a common
process launcher. Let's say that we have two programs &lt;tt class="docutils literal"&gt;foo&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;bar&lt;/tt&gt; that
we wish to share a common region of memory. We create a launcher program
&lt;tt class="docutils literal"&gt;launcher&lt;/tt&gt; that creates an &lt;tt class="docutils literal"&gt;MAP_ANONYMOUS | MAP_SHARED&lt;/tt&gt; file mapping, and
then &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;fork()s&lt;/span&gt;&lt;/tt&gt; twice. One child calls &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;exec("foo")&lt;/span&gt;&lt;/tt&gt; and the other
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;exec("bar")&lt;/span&gt;&lt;/tt&gt;. When these two programs start, they will start up with the
shared region pre-mapped.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="process-shared-memory-with-a-file-backing-zerocopy"&gt;
&lt;h2&gt;Process shared memory with a file-backing: Zerocopy&lt;/h2&gt;
&lt;p&gt;Processes may also share memory by mapping the same region of the same file
into their address space using &lt;tt class="docutils literal"&gt;MAP_SHARED&lt;/tt&gt;. The mapped regions of memory
will refer to the same physical pages. Writes to a page by one process are
visible through reads by any other processes.&lt;/p&gt;
&lt;p&gt;More importantly, however, is the fact that the physical pages behind the
backing are the same physical pages as the disk cache. This fact can be
exploited in certain use cases to optimize data flow throughout the system.&lt;/p&gt;
&lt;p&gt;Consider this scenario: We have an embedded Linux device receiving images from
a MIPI camera through the Video For Linux (V4l2) API, saving them to a file,
and also doing some useful work on them (perhaps analyzing them and recording
statistics). If we're not careful, may end up copying the images multiple times.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/mipi_scenario_a.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/mipi_scenario_a.svg&lt;/object&gt;
&lt;p class="caption"&gt;Simple embedded device application. One process reads camera images from
a device, while another process writes those images to storage.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;A simple choice of options for how we may implement this scenario is the
following:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Split the task into to two processes: one to manage the camera and read
data in. A second to do useful work, and write data out.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;process 1&lt;/em&gt; allocates image buffers using &lt;tt class="docutils literal"&gt;malloc()&lt;/tt&gt;
(or &lt;tt class="docutils literal"&gt;new() in c++&lt;/tt&gt;) and registers them with
&lt;tt class="docutils literal"&gt;v4l2&lt;/tt&gt; (as &lt;tt class="docutils literal"&gt;V4l2_USER_POINTER&lt;/tt&gt; structures).&lt;/li&gt;
&lt;li&gt;When images are received at &lt;em&gt;process 1&lt;/em&gt;, &lt;tt class="docutils literal"&gt;send()&lt;/tt&gt; them over a Unix domain
socket to &lt;em&gt;process 2&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;recv()&lt;/tt&gt; the image at &lt;em&gt;process 2&lt;/em&gt;, do the work on the image, and then
&lt;tt class="docutils literal"&gt;write()&lt;/tt&gt; the data to an open file descriptor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This choice may result in up to 5 separate instances of the same data in memory! A more informed choice may reduce this to only a single instance. Because we
never copy this data, this is referred to as a zerocopy optimization.&lt;/p&gt;
&lt;p&gt;First, lets illustrate where all these extra instances are coming from.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/mipi_scenario_b.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/mipi_scenario_b.svg&lt;/object&gt;
&lt;p class="caption"&gt;Lower-level schematic representation of data flow for the camera to
storage application example.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;First, the v4l2 driver may not be able to fill the userspace buffer directly
due to page alignment or size restrictions. Instead, it may be forced to map
and fill a buffer of it's own, and then copy that into the buffer that
program 1 allocated. Second, when writing to a socket, data is copied to a
network-stack buffer in the kernel until it can be delivered. When process 2
&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;recv()s&lt;/span&gt;&lt;/tt&gt; from the socket, the data is copied again into a process 2 allocated
buffer. Finally when process 2 calls &lt;tt class="docutils literal"&gt;write()&lt;/tt&gt; the data is copied from the
userspace buffer into page cache and asynchronously flushed out to the storage
medium through the storage driver.&lt;/p&gt;
&lt;p&gt;An zero-copy implementation of the same application might be as follows:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;Process 1 and 2 both &lt;tt class="docutils literal"&gt;mmap()&lt;/tt&gt; the same region of the output file into their
address space.&lt;/li&gt;
&lt;li&gt;Process 1 registers the buffer with &lt;tt class="docutils literal"&gt;v4l2&lt;/tt&gt; (as &lt;tt class="docutils literal"&gt;V4l2_MMAP&lt;/tt&gt; structures).&lt;/li&gt;
&lt;li&gt;When an image is received at process 1 it notifies process 2 by sending
a very small notification message over a Unix domain socket.&lt;/li&gt;
&lt;li&gt;Process 2 dereferences it's pointer to the mapped data and directly accesses
the image memory.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/mipi_scenario_c.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/mipi_scenario_c.svg&lt;/object&gt;
&lt;p class="caption"&gt;Optimized scenario.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In this implementation only one instance ever resides in physical memory. The
same physical memory pages are mapped through page tables (or unmapped to
physical addresses, in the case of kernel context) to four different pieces
of software:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;v4l2 driver thread in the kernel&lt;/li&gt;
&lt;li&gt;process 1&lt;/li&gt;
&lt;li&gt;process 2&lt;/li&gt;
&lt;li&gt;storage driver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The v4l2 driver fills the physics memory with image data, and then notifies
process 1. Process 1 then notifies process 2. Process 2 may access the data
by simply addressing it from within it's own address space. The storage driver
will asynchronously and opportunistically flush dirty file pages to storage
in the background.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="a-note-on-o-direct"&gt;
&lt;h2&gt;A note on &lt;tt class="docutils literal"&gt;O_DIRECT&lt;/tt&gt;&lt;/h2&gt;
&lt;p&gt;In the above zerocopy discussion we eliminate additional copies by taking
advantage of the existing page cache copy of the data. Another option that
can reduce data copies during write is to write to a file opened with
&lt;tt class="docutils literal"&gt;O_DIRECT&lt;/tt&gt;. The exact semantics of &lt;tt class="docutils literal"&gt;O_DIRECT&lt;/tt&gt; depends on the implementation
of the filesystem driver, but in general:&lt;/p&gt;
&lt;blockquote&gt;
&lt;tt class="docutils literal"&gt;O_DIRECT&lt;/tt&gt; (since Linux 2.4.10)
Try to minimize cache effects of the I/O to and from this
file.  In general this will degrade performance, but it is
useful in special situations, such as when applications do
their own caching.  File I/O is done directly to/from user-
space buffers.  The &lt;tt class="docutils literal"&gt;O_DIRECT&lt;/tt&gt; flag on its own makes an effort
to transfer data synchronously, but does not give the
guarantees of the &lt;tt class="docutils literal"&gt;O_SYNC&lt;/tt&gt; flag that data and necessary metadata
are transferred.  To guarantee synchronous I/O, &lt;tt class="docutils literal"&gt;O_SYNC&lt;/tt&gt; must be
used in addition to &lt;tt class="docutils literal"&gt;O_DIRECT&lt;/tt&gt;.&lt;/blockquote&gt;
&lt;p&gt;Usually what this means is that a &lt;tt class="docutils literal"&gt;write()&lt;/tt&gt; does not copy data to page cache.
Instead, the file system driver will immediately attempt to flush data to the
underlying storage medium. As mentioned in the manual quote above, in general
this will degrade performance. Specifically, the filesystem and storage drivers
may be forced to service the &lt;tt class="docutils literal"&gt;write()&lt;/tt&gt; immediately, rather than interleaving
the data flush with other system operations in an optimal way.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="filesystem-reliability"&gt;
&lt;h2&gt;Filesystem Reliability&lt;/h2&gt;
&lt;p&gt;While the Linux page cache is a significant boon to performance in general,
one penalty of this system is the reliability of storage on an unclean shutdown
or sudden loss of power situation. Any number filesystem changes may appear to
a userspace program to have been written to disk, when in fact they have only
been written to disk cache. This includes:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;new files&lt;/li&gt;
&lt;li&gt;deleted file&lt;/li&gt;
&lt;li&gt;new data written to a file&lt;/li&gt;
&lt;li&gt;file changed size&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Consider specifically the case of the &lt;tt class="docutils literal"&gt;ext2&lt;/tt&gt; filesystem, for which the inode
structure is illustrated below.&lt;/p&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/linux_zero_copy/posts/2018/linux_zero_copy/ext2_inode.svg" type="image/svg+xml"&gt;
posts/2018/linux_zero_copy/ext2_inode.svg&lt;/object&gt;
&lt;p class="caption"&gt;EXT2 filesystem inode structure and how it points to file data.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The inode structure forms the root of an unbalanced tree of data blocks
containing the actual file data. For small files all the data blocks are
referenced directly in the inode data structure. For larger file, the first
segment is referenced directly by the inode, and then for later segments the
inode points to another data structure, which then points to the data blocks.&lt;/p&gt;
&lt;p&gt;Now consider a process which performs following steps (indicated with
their &lt;tt class="docutils literal"&gt;libc&lt;/tt&gt; function calls):&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;open()&lt;/tt&gt; a new file (i.e. with &lt;tt class="docutils literal"&gt;flags |= O_CREAT&lt;/tt&gt;)&lt;/li&gt;
&lt;li&gt;periodically &lt;tt class="docutils literal"&gt;write()&lt;/tt&gt; a chunk of data to the file&lt;/li&gt;
&lt;li&gt;close the file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let's walk through the sequence of filesystem operations that will occur underlying the hood.&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;When the file is created, a new inode structure is allocated for the file,
then a directory entry is added to the parent directory file pointing to
this new inode.&lt;/li&gt;
&lt;li&gt;Each time we write to the file, the filesystem driver will first check to see
if there is an unfilled block already allocated to hold the data. If not it
will find a free block and add a pointer to it in the inode and update it's
accounting of the file size. Then it will fill that block with data and
update the file modification time.&lt;/li&gt;
&lt;li&gt;As the file gets larger, we'll overflow the direct blocks and the filesystem
driver will need to allocate an indirect block structure, add a pointer to
the inode structure, and then allocate a block and add a pointer to the
indirection structure.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each of these modifications is essentially a write to some block of the
underlying block device. Each of these writes are subject to page caching and
so the actual write really just happens in memory. At some point in the future
those dirty pages are flushed out to disk and persisted. In an unclean shutdown
or sudden power loss any write waiting in page cache to be flushed will not
be persisted to disk. This can include:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;file data&lt;/li&gt;
&lt;li&gt;inode data&lt;/li&gt;
&lt;li&gt;indirect block&lt;/li&gt;
&lt;li&gt;entry data&lt;/li&gt;
&lt;li&gt;directory content data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modern journaled filesystems (like ext4) deal with this situation by recording
in a "journal" all filesystem modifications in-sequence. It ensures these
journal entries are flushed to disk before the corresponding data changes are,
so that any outstanding changes can be completed by the filesystem driver the
next time it is started.&lt;/p&gt;
&lt;p&gt;However, it is important to recognize the nature of these interactions and
design filesystem access patterns to best account for what will happen on a
sudden power loss. In the example above each incremental write may lead to a
significant change of filesystem metadata. A sudden power loss may lose those
metadata changes, those data changes, or both. A better design for such a
process would be to open the file for writing, and then pre-truncate it to the
desired size (if possible) or to some reasonably conservative estimate of it's
size. This way the filesystem updates all it's metadata and storage allocations
up front and it doesn't have to do any of those updates on the fly. A sudden
power loss might still lose data of course, but it will be limited to only the
unflushed pages in the page cache and not due to missing filesystem metadata or pointers.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="a-note-on-memory-usage-metrics"&gt;
&lt;h2&gt;A Note on Memory Usage Metrics&lt;/h2&gt;
&lt;p&gt;When it comes to system-level performance monitoring there are a couple of
top level metrics that are often tracked:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;CPU utilization&lt;/li&gt;
&lt;li&gt;GPU (or other co-processor) utilization&lt;/li&gt;
&lt;li&gt;memory utilization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Given the discussion of the page cache and virtual memory systems above, we
can now discuss how to measure and meaningfully understand memory utilization
on a Linux system. Most userspace tools (like &lt;tt class="docutils literal"&gt;free&lt;/tt&gt;, for instance) get their
information from &lt;a class="reference external" href="http://man7.org/linux/man-pages/man5/proc.5.html"&gt;/proc/meminfo&lt;/a&gt;, a virtual file served up from the kernel
containing information about memory usage. Due to the Linux page cache and
demand-paged memory access, nearly all physical memory (up to the &lt;tt class="docutils literal"&gt;kswapd&lt;/tt&gt; low-watermark) on a Linux system will be in use. When we talk about "free"
memory on a Linux system we are usually referring to the &lt;tt class="docutils literal"&gt;MemAvailable&lt;/tt&gt; entry
of &lt;tt class="docutils literal"&gt;/proc/meminfo&lt;/tt&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;tt class="docutils literal"&gt;MemAvailable %lu&lt;/tt&gt; (since Linux 3.14)
An estimate of how much memory is available for start‐
ing new applications, without swapping.&lt;/blockquote&gt;
&lt;p&gt;Pages that are reclaimable without swapping include unlocked pages of both the
disk cache and buffer cache, including demand-paged file data which is
currently resident. Linux's accounting for this value, however, is inexact. It
may not know whether a page memory can really be reclaimed until the swap daemon
gets around to actually trying to free it. In
addition, the fact that this amount of memory can be reclaimed doesn't mean
that it can be reclaimed and repurposed &lt;em&gt;instantaneously&lt;/em&gt;, and some actions
may fail due to low memory if the swap daemon can't find enough pages to
release fast enough.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description><category>kernel</category><category>linux</category><guid>https://www.joshbialkowski.com/posts/2018/linux_zero_copy/linux-zero-copy.html</guid><pubDate>Fri, 16 Mar 2018 00:00:00 GMT</pubDate></item><item><title>Nvidia Kernel Channel</title><link>https://www.joshbialkowski.com/posts/2018/nvidia_kernel_channel/nvidia-kernel-channel.html</link><dc:creator>Josh Bialkowski</dc:creator><description>&lt;div&gt;&lt;div class="section" id="background"&gt;
&lt;h2&gt;Background&lt;/h2&gt;
&lt;p&gt;Relatively rarely but often enough to be a problem we see a kernel &lt;tt class="docutils literal"&gt;NULL&lt;/tt&gt; pointer dereference or failed paging request. The error occurs in one of three locations (see failure points below). The problem seems to only occur on some exceptional condition (i.e. &lt;tt class="docutils literal"&gt;syncpt timeout&lt;/tt&gt;). If the stream is completely nominal then we do not see this issue.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="hypothesis"&gt;
&lt;h2&gt;Hypothesis&lt;/h2&gt;
&lt;p&gt;The nvidia v4l2 camera driver contains a race condition in &lt;tt class="docutils literal"&gt;tegra/camera/channel.c&lt;/tt&gt;. The &lt;tt class="docutils literal"&gt;struct tegra_channel&lt;/tt&gt; contains a four-element ring buffer of &lt;tt class="docutils literal"&gt;struct vb2_buffer&lt;/tt&gt; objects. The driver utilizes two kernel threads: the capture thread starts a frame capture, and the release thread concludes a frame capture. Nominally they operate on a shared ring buffer. One thread writes elements into the buffer, and the other thread reads elements out of the buffer. However both threads have some error condition where they reset the buffer, and I believe that this unsynchronized reset is the problem. My hypothesis is that one thread resets the buffer while another thread is in the process of reading/writing to it.&lt;/p&gt;
&lt;p&gt;In particular it appears that the purpose of this buffer is to indicate "this is the set of frames to discard if we need to reset". It includes the set of frames that are in &lt;tt class="docutils literal"&gt;release&lt;/tt&gt; as well as potentially one frame that is on it's way to begin capture.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="solution"&gt;
&lt;h2&gt;Solution&lt;/h2&gt;
&lt;p&gt;The requirement satisfied by the buffer solution is the following: If an error is returned
at either the &lt;tt class="docutils literal"&gt;soc_camera_capture_frame()&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;soc_camera_release_frame()&lt;/tt&gt; calls, then the VI will be reset and so it doesn't make sense to keep processing frames. Some specific examples:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;If there is a &lt;tt class="docutils literal"&gt;syncpt timeout&lt;/tt&gt; error in the release thread while waiting for the frame to finish then we want the capture thread to reset, and any frames currently in flight we want to be released immediately without passing them to the VI.&lt;/li&gt;
&lt;li&gt;If there is a frame start error in the capture thread, then will reset the VI so we want to flush any frames that are "in flight" without waiting for the VI to finish filling them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One way of solving this is to keep track of an &lt;a class="reference external" href="http://www.makelinux.net/books/lkd2/ch09lev1sec1"&gt;atomic&lt;/a&gt; &lt;tt class="docutils literal"&gt;reset_version&lt;/tt&gt; integer. When the capture thread restarts the stream, it increments this count. Each time it starts capture on a buffer it stamps the buffer with the current &lt;tt class="docutils literal"&gt;reset_version&lt;/tt&gt;. Ever time the release thread starts to wait on a frame, it verifies that the &lt;tt class="docutils literal"&gt;reset_version&lt;/tt&gt; of the buffer matches the current &lt;tt class="docutils literal"&gt;reset_version&lt;/tt&gt;. If it is different, it flushes the buffer without waiting for it to finish receiving (because it was queued before the VI was reset). Every time the capture thread preps a buffer for capture it checks to see if the &lt;tt class="docutils literal"&gt;reset_version&lt;/tt&gt; has changed. If it has, then it will reset the VI first.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="failure-points"&gt;
&lt;h2&gt;Failure points&lt;/h2&gt;
&lt;p&gt;There are two kernel threads. One to capture data to buffer, and a second to release the buffer. Presumably they do their work at start of frame and at end of frame.&lt;/p&gt;
&lt;p&gt;The entry points for the two threads are&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_kthread_capture_start()&lt;/tt&gt;:&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_kthread_release()&lt;/tt&gt;:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;However note that some of the functions executed here might actually be executed in a third thread. For instance (&lt;strong&gt;stack 1&lt;/strong&gt;) to indicate it's actually the  userspace thread calling into an ioctl that is leading to the call.&lt;/p&gt;
&lt;p&gt;The crash seems to generally occur in one of these three places. My hypothesis is that there is race condition, due to the fact that we see the error consistently on a failed stream closure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;stack 1&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
[ 1400.657205] [&amp;lt;ffffffc000750044&amp;gt;] tegra_channel_queued_buf_done+0x64/0x160
[ 1400.665275] [&amp;lt;ffffffc000750354&amp;gt;] tegra_channel_stop_streaming+0x54/0xc8
[ 1400.673150] [&amp;lt;ffffffc00073d5b0&amp;gt;] __vb2_queue_cancel+0x30/0xa8
[ 1400.680135] [&amp;lt;ffffffc00073d834&amp;gt;] vb2_streamoff+0xac/0x124
[ 1400.686744] [&amp;lt;ffffffc00073f014&amp;gt;] vb2_ioctl_streamoff+0x44/0x50
[ 1400.693768] [&amp;lt;ffffffc000729ba0&amp;gt;] v4l_streamoff+0x1c/0x24
[ 1400.700246] [&amp;lt;ffffffc00072dd90&amp;gt;] __video_do_ioctl+0x174/0x284
[ 1400.707136] [&amp;lt;ffffffc00072dafc&amp;gt;] video_usercopy+0x1e4/0x2e8
[ 1400.713831] [&amp;lt;ffffffc00072dc14&amp;gt;] video_ioctl2+0x14/0x1c
[ 1400.720155] [&amp;lt;ffffffc000728990&amp;gt;] v4l2_ioctl+0x70/0x134
[ 1400.726365] [&amp;lt;ffffffc0001be4c4&amp;gt;] vfs_ioctl+0x1c/0x44
[ 1400.732373] [&amp;lt;ffffffc0001bf194&amp;gt;] do_vfs_ioctl+0x220/0x22c
[ 1400.738795] [&amp;lt;ffffffc0001bf274&amp;gt;] SyS_ioctl+0xd4/0x17c
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;stack 2&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
May  5 10:01:37 spitmule3 kernel: [ 7675.570947] [&amp;lt;ffffffc00074fb7c&amp;gt;] dequeue_buffer+0x3c/0x7c
May  5 10:01:37 spitmule3 kernel: [ 7675.576347] [&amp;lt;ffffffc000750ed8&amp;gt;] tegra_channel_kthread_capture_start+0x154/0x1c4
May  5 10:01:37 spitmule3 kernel: [ 7675.583741] [&amp;lt;ffffffc0000d04b8&amp;gt;] kthread+0xc0/0xc8
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;stack 3&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
May  4 09:42:21 deadfire3 kernel: [ 6656.704312] [&amp;lt;ffffffc00074fd94&amp;gt;] free_ring_buffers+0x3c/0xd0
May  4 09:42:21 deadfire3 kernel: [ 6656.709971] [&amp;lt;ffffffc00074ffe8&amp;gt;] tegra_channel_release_frame+0xa0/0xac
May  4 09:42:21 deadfire3 kernel: [ 6656.716495] [&amp;lt;ffffffc00075055c&amp;gt;] tegra_channel_kthread_release+0x178/0x1a4
May  4 09:42:21 deadfire3 kernel: [ 6656.723366] [&amp;lt;ffffffc0000d04b8&amp;gt;] kthread+0xc0/0xc8
&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="program-flow"&gt;
&lt;h2&gt;Program flow&lt;/h2&gt;
&lt;div class="section" id="life-of-a-buffer"&gt;
&lt;h3&gt;Life of a buffer&lt;/h3&gt;
&lt;div class="figure align-center"&gt;
&lt;object data="https://www.joshbialkowski.com/posts/2018/nvidia_kernel_channel/posts/2018/nvidia_kernel_channel/nvidia_kernel_channel.svg" type="image/svg+xml"&gt;
posts/2018/nvidia_kernel_channel/nvidia_kernel_channel.svg&lt;/object&gt;
&lt;p class="caption"&gt;Life of a buffer&lt;/p&gt;
&lt;/div&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_buffer_queue()&lt;/tt&gt;: inserts a buffer into &lt;tt class="docutils literal"&gt;capture&lt;/tt&gt;&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;buf_queue&lt;/tt&gt; member of &lt;tt class="docutils literal"&gt;vb2_ops&lt;/tt&gt;, I believe this is called throught he v4l2 &lt;tt class="docutils literal"&gt;ioctl&lt;/tt&gt; to enqueue a buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;dequeue_buffer()&lt;/tt&gt;: removes a buffer from &lt;tt class="docutils literal"&gt;capture&lt;/tt&gt; and adds it to &lt;tt class="docutils literal"&gt;buffer&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt;: nominally adds a buffer &lt;tt class="docutils literal"&gt;release&lt;/tt&gt;, but may also call &lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_kthread_release&lt;/tt&gt;: removes a frame from &lt;tt class="docutils literal"&gt;release&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;: removes a buffer from &lt;tt class="docutils literal"&gt;buffer&lt;/tt&gt; and marks it as &lt;tt class="docutils literal"&gt;done&lt;/tt&gt;, I believe returning it to v4l2 and allowing it to be retreived with the v4l2 &lt;tt class="docutils literal"&gt;ioctl&lt;/tt&gt; to dequeue a buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="capture-thread"&gt;
&lt;h3&gt;Capture thread&lt;/h3&gt;
&lt;p&gt;The capture thread loop is basically:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;dequeue_buf()&lt;/tt&gt;: Retrieve a buffer that is ready to be filled&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_capture_frame(chan, buf)&lt;/tt&gt;: Start filling the buffer with
frame data.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="release-thread"&gt;
&lt;h3&gt;Release thread&lt;/h3&gt;
&lt;p&gt;The release thread is basically&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;list_del_init(&amp;amp;buf-&amp;gt;queue)&lt;/span&gt;&lt;/tt&gt;: remove the buffer from the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;chan-&amp;gt;release&lt;/span&gt;&lt;/tt&gt; list&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_release_frame(chan, buf)&lt;/tt&gt;: release the frame to userspace&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="frame-buffers"&gt;
&lt;h3&gt;Frame Buffers&lt;/h3&gt;
&lt;p&gt;The vb2 buffer objects are stored in the &lt;tt class="docutils literal"&gt;buffers&lt;/tt&gt; field of the &lt;tt class="docutils literal"&gt;struct tegra_channel&lt;/tt&gt;. This is a fixed size array of four elements. It is used as a ring buffer through the
indices &lt;tt class="docutils literal"&gt;save_index&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;free_index&lt;/tt&gt;:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;strong&gt;``save_index``&lt;/strong&gt;: The "write" head of the ring buffer. If we need to add an element to the ring this is where we add it, and the increment (with wrap-around).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;``free_index``&lt;/strong&gt;: THe "read" head of the ring buffer. If we want to remove an element of the ring this where we remove from, and increment (with wrap-around).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="possible-races"&gt;
&lt;h2&gt;Possible races&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;``free_ring_buffers()``&lt;/strong&gt;, called by:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;capture thread:&lt;ul&gt;
&lt;li&gt;stack 1 (CAPTURE_ERROR)&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_capture_frame()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_kthread_capture_start()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;stack 2 (capture state unspecified)&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_capture_frame()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_kthread_capture_start()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;release thread&lt;ul&gt;
&lt;li&gt;stack 1 (CAPTURE_SUCCESS):&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_release_frame()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;stack 2 (CAPTURE_TIMEOUT):&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_release_frame()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;v4l userspace thread:&lt;ul&gt;
&lt;li&gt;stack 1 (CAPTURE_GOOD)&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_capture_done()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_stop_streaming()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;stack 2 (always)&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_stop_streaming()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;``add_buffer_to_ring()``&lt;/strong&gt;, called by:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;stack 1&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;add_buffer_to_ring()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;dequeue_buffer()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_capture_done()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_stop_streaming()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;stack 2&lt;ul&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;add_buffer_to_ring()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;dequeue_buffer()&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_kthread_capture_start()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some relevant notes:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_stop_streaming()&lt;/tt&gt; calls &lt;tt class="docutils literal"&gt;tegra_channel_stop_kthreads()&lt;/tt&gt; before it calls &lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;tegra_channel_stop_threads()&lt;/tt&gt; does wait on a &lt;tt class="docutils literal"&gt;completion&lt;/tt&gt; indicating the thread has exited before it continues.&lt;/li&gt;
&lt;li&gt;that &lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer&lt;/tt&gt; is called by both &lt;tt class="docutils literal"&gt;tegra_channel_capture_frame()&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;tegra_channel_release_frame()&lt;/tt&gt; so there is a second path to &lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt; from the release thread.&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt; takes a &lt;tt class="docutils literal"&gt;int state&lt;/tt&gt; argument, which is not used. I suspect the intent was to communicate the capture state, but this is stored instead in &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;chan-&amp;gt;capture_state&lt;/span&gt;&lt;/tt&gt; (where &lt;tt class="docutils literal"&gt;chan&lt;/tt&gt; is a &lt;tt class="docutils literal"&gt;struct tegra_channel&lt;/tt&gt;).&lt;/li&gt;
&lt;li&gt;&lt;tt class="docutils literal"&gt;Unable to handle kernel paging request at virual &lt;span class="pre"&gt;address...&lt;/span&gt;&lt;/tt&gt; is likely an indicator of a corrupt stack. Perhaps a buffer overflow. The &lt;tt class="docutils literal"&gt;dead&lt;/tt&gt; address prefix likely indicates that the pointer was cleared out or invalidated somehow (i.e. &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;free()ed&lt;/span&gt;&lt;/tt&gt;?&lt;/li&gt;
&lt;li&gt;Several functions will set &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;chan-&amp;gt;capture_state&lt;/span&gt;&lt;/tt&gt; to something other than &lt;tt class="docutils literal"&gt;CAPTURE_GOOD&lt;/tt&gt; but there are no functions in &lt;tt class="docutils literal"&gt;channel.c&lt;/tt&gt; that set it to &lt;tt class="docutils literal"&gt;CAPTURE_GOOD&lt;/tt&gt;. This is done instead in &lt;tt class="docutils literal"&gt;vi2_channel_capture_frame()&lt;/tt&gt; defined in &lt;tt class="docutils literal"&gt;vi2_fops.c&lt;/tt&gt;. This function is assigned as the &lt;tt class="docutils literal"&gt;soc_channel_capture_frame&lt;/tt&gt; member of the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;chan-&amp;gt;fops&lt;/span&gt;&lt;/tt&gt; vtable which is called at the end of &lt;tt class="docutils literal"&gt;tegra_channel_enable_stream()&lt;/tt&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;tt class="docutils literal"&gt;free_ring_buffers()&lt;/tt&gt; is called from &lt;tt class="docutils literal"&gt;tegra_channel_ring_buffer()&lt;/tt&gt; or &lt;tt class="docutils literal"&gt;tegra_channel_stop_streaming()&lt;/tt&gt; then the number of buffers to free is &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;chan-&amp;gt;num_buffers&lt;/span&gt;&lt;/tt&gt;. If called from &lt;tt class="docutils literal"&gt;tegra_channel_release_frame()&lt;/tt&gt; then the number of buffers to free is one.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="section" id="some-notes-on-kernel-code"&gt;
&lt;h2&gt;Some notes on kernel code&lt;/h2&gt;
&lt;div class="section" id="freezing-of-tasks"&gt;
&lt;h3&gt;Freezing of tasks&lt;/h3&gt;
&lt;p&gt;From &lt;a class="reference external" href="https://www.kernel.org/doc/Documentation/power/freezing-of-tasks.txt"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is how user space processes and some kernel threads are controlled during
hybernation or system-wide susped.&lt;/p&gt;
&lt;blockquote&gt;
All freezable tasks must react to that by calling &lt;tt class="docutils literal"&gt;try_to_freeze()&lt;/tt&gt;, which
results in a call to &lt;tt class="docutils literal"&gt;__refrigerator()&lt;/tt&gt; (defined in &lt;tt class="docutils literal"&gt;kernel/freezer.c&lt;/tt&gt;), which sets
the task's &lt;tt class="docutils literal"&gt;PF_FROZEN&lt;/tt&gt; flag, changes its state to &lt;tt class="docutils literal"&gt;TASK_UNINTERRUPTIBLE&lt;/tt&gt; and makes
it loop until &lt;tt class="docutils literal"&gt;PF_FROZEN&lt;/tt&gt; is cleared for it.&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section" id="sleeping"&gt;
&lt;h3&gt;Sleeping&lt;/h3&gt;
&lt;p&gt;From &lt;a class="reference external" href="http://www.makelinux.net/ldd3/chp-6-sect-2"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
The preferred alternative is &lt;tt class="docutils literal"&gt;wait_event_interruptible&lt;/tt&gt;, which can be
interrupted by signals. This version returns an integer value that you should
check; a nonzero value means your sleep was interrupted by some sort of signal,
and your driver should probably return &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;-ERESTARTSYS&lt;/span&gt;&lt;/tt&gt;.&lt;/blockquote&gt;
&lt;p&gt;In particular tegra_channel_kthread_capture_start sleeps until the following
condition is true:&lt;/p&gt;
&lt;pre class="literal-block"&gt;
!list_empty(&amp;amp;chan-&amp;gt;capture) || kthread_should_stop()
&lt;/pre&gt;
&lt;p&gt;Which I interpret to mean, in english "Sleep until there is a buffer available
to fill we are supposed to die."&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="completion"&gt;
&lt;h3&gt;Completion&lt;/h3&gt;
&lt;p&gt;From &lt;a class="reference external" href="https://www.kernel.org/doc/Documentation/scheduler/completion.txt"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
Completions are a code synchronization mechanism which is preferable to any misuse of locks. Any time you think of using &lt;tt class="docutils literal"&gt;yield()&lt;/tt&gt; or some quirky &lt;tt class="docutils literal"&gt;msleep(1)&lt;/tt&gt; loop to allow something else to proceed, you probably want to look into using one of the &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;wait_for_completion*()&lt;/span&gt;&lt;/tt&gt; calls instead. The advantage of using completions is clear intent of the code, but also more efficient code as both threads can continue until the result is actually  needed.&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section" id="spin-locks"&gt;
&lt;h3&gt;Spin Locks&lt;/h3&gt;
&lt;p&gt;From &lt;a class="reference external" href="http://www.makelinux.net/ldd3/chp-5-sect-5"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
Spinlocks are simple in concept. A spinlock is a mutual exclusion device that can have only two values: "locked" and "unlocked." It is usually implemented as a single bit in an integer value. Code wishing to take out a particular lock tests the relevant bit. If the lock is available, the "locked" bit is set and the code continues into the critical section. If, instead, the lock has been taken by somebody else, the code goes into a tight loop where it repeatedly checks the lock until it becomes available. This loop is the "spin" part of a spinlock.&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div class="section" id="list-operations"&gt;
&lt;h3&gt;List Operations&lt;/h3&gt;
&lt;p&gt;&lt;a class="reference external" href="https://www.kernel.org/doc/htmldocs/kernel-api/API-list-for-each-entry-safe.html"&gt;list_for_each_entry_safe&lt;/a&gt; doesn't really indicate whether or not the list may be empty. I think the answer is no (otherwise, it's not a well formed list). In particular, note that &lt;tt class="docutils literal"&gt;tegra_channel_kthread_release()&lt;/tt&gt; and &lt;tt class="docutils literal"&gt;dequeue_buffer()&lt;/tt&gt; both check &lt;tt class="docutils literal"&gt;&lt;span class="pre"&gt;!list_empty(...)&lt;/span&gt;&lt;/tt&gt; instead of just iterating under the assumption that it is non-empty.
&lt;a class="reference external" href="https://www.kernel.org/doc/htmldocs/kernel-api/API-list-entry.html"&gt;list_entry&lt;/a&gt; get the struct for this entry&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="channel-state"&gt;
&lt;h2&gt;Channel State&lt;/h2&gt;
&lt;p&gt;The following is defined in &lt;tt class="docutils literal"&gt;mc_common.h&lt;/tt&gt;. Comments have been moved from the
header to the field for readability.&lt;/p&gt;
&lt;pre class="code c"&gt;&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-1"&gt;&lt;/a&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;tegra_channel&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-2"&gt;&lt;/a&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-3"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// list entry in a composite device dmas list&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-4"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;list_head&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-5"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-6"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// V4L2 video device associated with the video channel&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-7"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;video_device&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-8"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-9"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// media pad for the video device entity&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-10"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;media_pad&lt;/span&gt; &lt;span class="n"&gt;pad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-11"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-12"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// pipeline belonging to the channel&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-13"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;media_pipeline&lt;/span&gt; &lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-14"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;mutex&lt;/span&gt; &lt;span class="n"&gt;video_lock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-15"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-16"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// composite device DT node port number for the channel&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-17"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;tegra_mc_vi&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-18"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;v4l2_subdev&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;subdev&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;MAX_SUBDEVICES&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-19"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;v4l2_subdev&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;subdev_on_csi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-20"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-21"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;v4l2_ctrl_handler&lt;/span&gt; &lt;span class="n"&gt;ctrl_handler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-22"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;v4l2_pix_format&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-23"&gt;&lt;/a&gt;  &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;tegra_video_format&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fmtinfo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-24"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;mutex&lt;/span&gt; &lt;span class="n"&gt;stop_kthread_lock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-25"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-26"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TEGRA_CSI_BLOCKS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-27"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;syncpt&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;TEGRA_CSI_BLOCKS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-28"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;syncpoint_fifo&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;TEGRA_CSI_BLOCKS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-29"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;buffer_offset&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TEGRA_CSI_BLOCKS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-30"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;buffer_state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;QUEUED_BUFFERS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-31"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;vb2_buffer&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;buffers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;QUEUED_BUFFERS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-32"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-33"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-34"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// Next buffer slot available for insertion of a new&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-35"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// buffer. Incremented by add_buffer_to_ring()&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-36"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;save_index&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-37"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-38"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// Next buffer slot containing a buffer ready go be&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-39"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// removed. Incremented by free_ring_buffers()&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-40"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;free_index&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-41"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num_buffers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-42"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;released_bufs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-43"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-44"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// kernel thread task structure for the capture thread&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-45"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;task_struct&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;kthread_capture_start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-46"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-47"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// kernel thread task structure for the release thread&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-48"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;task_struct&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;kthread_release&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-49"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-50"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// wait queue for capture thread&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-51"&gt;&lt;/a&gt;  &lt;span class="n"&gt;wait_queue_head_t&lt;/span&gt; &lt;span class="n"&gt;start_wait&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-52"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-53"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// wait queue for release thread&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-54"&gt;&lt;/a&gt;  &lt;span class="n"&gt;wait_queue_head_t&lt;/span&gt; &lt;span class="n"&gt;release_wait&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-55"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-56"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// vb2 buffer queue&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-57"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;vb2_queue&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-58"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-59"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// allocation context for the vb2 queue&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-60"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;alloc_ctx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-61"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-62"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// list of queued buffers for capture&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-63"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;list_head&lt;/span&gt; &lt;span class="n"&gt;capture&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-64"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-65"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// list of queued buffers for release&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-66"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;list_head&lt;/span&gt; &lt;span class="n"&gt;release&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-67"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-68"&gt;&lt;/a&gt;  &lt;span class="n"&gt;spinlock_t&lt;/span&gt; &lt;span class="n"&gt;start_lock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-69"&gt;&lt;/a&gt;  &lt;span class="n"&gt;spinlock_t&lt;/span&gt; &lt;span class="n"&gt;release_lock&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-70"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="n"&gt;capture_comp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-71"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;completion&lt;/span&gt; &lt;span class="n"&gt;release_comp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-72"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-73"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// csi register bases&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-74"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;__iomem&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;csibase&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;TEGRA_CSI_BLOCKS&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-75"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-76"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// channel buffer stride alignment, default is 64&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-77"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;stride_align&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-78"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-79"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// image width alignment, default is 4&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-80"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;width_align&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-81"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;valid_ports&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-82"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;total_ports&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-83"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;numlanes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-84"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-85"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// Tegra IO rail ID of this video channel&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-86"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;io_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-87"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;num_subdevs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-88"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-89"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// v4l2 buffers sequence number&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-90"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;sequence&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-91"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;saved_ctx_bypass&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-92"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;saved_ctx_pgmode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-93"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;gang_mode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-94"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;gang_mode_default&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-95"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;gang_width&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-96"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;gang_height&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-97"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;gang_bytesperline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-98"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;gang_sizeimage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-99"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-100"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// formats supported&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-101"&gt;&lt;/a&gt;  &lt;span class="n"&gt;DECLARE_BITMAP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fmts_bitmap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MAX_FORMAT_NUM&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-102"&gt;&lt;/a&gt;  &lt;span class="n"&gt;atomic_t&lt;/span&gt; &lt;span class="n"&gt;power_on_refcnt&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-103"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;v4l2_fh&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-104"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-105"&gt;&lt;/a&gt;  &lt;span class="c1"&gt;// bypass flag for VI bypass mode&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-106"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;bypass&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-107"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;bfirst_fstart&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-108"&gt;&lt;/a&gt;  &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;channel_capture_state&lt;/span&gt; &lt;span class="n"&gt;capture_state&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-109"&gt;&lt;/a&gt;  &lt;span class="n"&gt;atomic_t&lt;/span&gt; &lt;span class="n"&gt;is_streaming&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-110"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;requested_kbyteps&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-111"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;requested_hz&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-112"&gt;&lt;/a&gt;  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;grp_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-113"&gt;&lt;/a&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-114"&gt;&lt;/a&gt;  &lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;tegra_vi_channel_fops&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;fops&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;a name="rest_code_76596249d5254a0c96d676d9f8412055-115"&gt;&lt;/a&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;Also note that the constant &lt;tt class="docutils literal"&gt;QUEUED_BUFFERS&lt;/tt&gt; is &lt;tt class="docutils literal"&gt;= 4&lt;/tt&gt;.&lt;/p&gt;
&lt;div class="section" id="error-traces"&gt;
&lt;h3&gt;Error traces&lt;/h3&gt;
&lt;pre class="literal-block"&gt;
May  2 14:11:20 deadfire3 kernel: [ 8675.391692] video4linux video3: frame start syncpt timeout!0
May  2 14:11:20 deadfire3 kernel: [ 8675.399203] Unable to handle kernel NULL pointer dereference at virtual address 0000004c
May  2 14:11:20 deadfire3 kernel: [ 8675.411531] pgd = ffffffc00007d000
May  2 14:11:21 deadfire3 kernel: [ 8675.414938] [0000004c] *pgd=000000017fc05003, *pmd=000000017fc06003, *pte=00e0000050041407
May  2 14:11:21 deadfire3 kernel: [ 8675.423853] Internal error: Oops: 96000046 [#1] PREEMPT SMP
May  2 14:11:21 deadfire3 kernel: [ 8675.429421] Enter nvdumper_crash_setup_regs
May  2 14:11:21 deadfire3 kernel: [ 8675.433608] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.433610] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.433611] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.446934] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.451375] Modules linked in: bcmdhd cfg80211 bluedroid_pm
May  2 14:11:21 deadfire3 kernel: [ 8675.457020] CPU: 2 PID: 20545 Comm: vi-output-4, tc Not tainted 3.10.96-skydio-gc145d3a6e8d-dirty #147
May  2 14:11:21 deadfire3 kernel: [ 8675.466318] task: ffffffc0fe172fc0 ti: ffffffc0d6310000 task.ti: ffffffc0d6310000
May  2 14:11:21 deadfire3 kernel: [ 8675.473802] PC is at free_ring_buffers+0x3c/0xd0
May  2 14:11:21 deadfire3 kernel: [ 8675.478420] LR is at tegra_channel_release_frame+0xa0/0xac
May  2 14:11:21 deadfire3 kernel: [ 8675.483902] pc : [&amp;lt;ffffffc00074fe10&amp;gt;] lr : [&amp;lt;ffffffc000750064&amp;gt;] pstate: 60000145
May  2 14:11:21 deadfire3 kernel: [ 8675.491290] sp : ffffffc0d6313d40
May  2 14:11:21 deadfire3 kernel: [ 8675.494609] x29: ffffffc0d6313d40 x28: ffffffc0d6310000
May  2 14:11:21 deadfire3 kernel: [ 8675.499947] x27: 0000000000000001 x26: ffffffc0fc82e1d0
May  2 14:11:21 deadfire3 kernel: [ 8675.505287] x25: ffffffc0d6313e20 x24: ffffffc0000d0ed8
May  2 14:11:21 deadfire3 kernel: [ 8675.510630] x23: ffffffc001003c90 x22: 0000000000000005
May  2 14:11:21 deadfire3 kernel: [ 8675.515969] x21: 0000000000000001 x20: 0000000000000001
May  2 14:11:21 deadfire3 kernel: [ 8675.521310] x19: ffffffc0fc82dbc0 x18: 000000000000013f
May  2 14:11:21 deadfire3 kernel: [ 8675.526649] x17: 0000007f993c130c x16: 0000000000000000
May  2 14:11:21 deadfire3 kernel: [ 8675.531985] x15: 0000000000000000 x14: 0000000000000001
May  2 14:11:21 deadfire3 kernel: [ 8675.537324] x13: 000000000000002b x12: 0000000000000150
May  2 14:11:21 deadfire3 kernel: [ 8675.542664] x11: 0000000000129fbe x10: 00000000ffa722d2
May  2 14:11:21 deadfire3 kernel: [ 8675.548001] x9 : ffffffc0d6313bc0 x8 : 00ffffffffffffff
May  2 14:11:21 deadfire3 kernel: [ 8675.553341] x7 : 0000000034155555 x6 : 00000000000021e2
May  2 14:11:21 deadfire3 kernel: [ 8675.558679] x5 : ffffffffc465ffff x4 : 000000000000c9ff
May  2 14:11:21 deadfire3 kernel: [ 8675.564015] x3 : 00000000000021e3 x2 : 0000000000099090
May  2 14:11:21 deadfire3 kernel: [ 8675.569352] x1 : 000000000009908f x0 : 0000000000000014
May  2 14:11:21 deadfire3 kernel: [ 8675.574691]
May  2 14:11:21 deadfire3 kernel: [ 8675.574691] PC: 0xffffffc00074fd90:
May  2 14:11:21 deadfire3 kernel: [ 8675.579652] fd90  f9400400 b94002a1 97f13b13 f9422a60 f9400400 b9400ea1 97f13b0f 91000694
May  2 14:11:21 deadfire3 kernel: [ 8675.587966] fdb0  910012b5 4b170280 6b0002df 54fffd8c a94153f3 a9425bf5 f9401bf7 a8c47bfd
May  2 14:11:21 deadfire3 kernel: [ 8675.596281] fdd0  d65f03c0 a9bd7bfd 910003fd a90153f3 a9025bf5 aa0003f3 2a0103f4 34000541
May  2 14:11:21 deadfire3 kernel: [ 8675.604594] fdf0  52800035 528000b6 b945da60 9102d800 f8607a60 b948d661 11000422 b908d662
May  2 14:11:21 deadfire3 kernel: [ 8675.612916] fe10  b9003801 b9001015 b9450e62 b9426001 34000041 b9005802 b9491661 7100043f
May  2 14:11:21 deadfire3 kernel: [ 8675.621228] fe30  54000081 b945e261 7100043f 54000088 b945da61 9105a021 b8217a76 b945da61
May  2 14:11:21 deadfire3 kernel: [ 8675.629545] fe50  11000422 b905da62 8b214a61 b945a021 97ffb6de b945da60 71000c1f 54000049
May  2 14:11:21 deadfire3 kernel: [ 8675.637852] fe70  b905da7f b945de60 51000400 b905de60 b945e260 11000400 b905e260 71000694
May  2 14:11:21 deadfire3 kernel: [ 8675.646160]
May  2 14:11:21 deadfire3 kernel: [ 8675.646160] LR: 0xffffffc00074ffe4:
May  2 14:11:21 deadfire3 kernel: [ 8675.651123] ffe4  d63f0060 34000160 aa1303e0 97ffff48 52800040 b9091660 aa1303e0 aa1403e1
May  2 14:11:21 deadfire3 kernel: [ 8675.659443] 0004  910083a2 528000a3 97ffffa6 14000015 f0006400 794bf400 36100160 f0006400
May  2 14:11:21 deadfire3 kernel: [ 8675.667753] 0024  91162000 91014000 91026261 f0004b62 91256042 b0002703 9104e063 9101e063
May  2 14:11:21 deadfire3 kernel: [ 8675.676071] 0044  97efd5f4 b945da60 9105a000 52800081 b8207a61 aa1303e0 52800021 97ffff5d
May  2 14:11:21 deadfire3 kernel: [ 8675.684381] 0064  a94153f3 a8c37bfd d65f03c0 a9ba7bfd 910003fd a90153f3 a9025bf5 a90363f7
May  2 14:11:21 deadfire3 kernel: [ 8675.692691] 0084  a9046bf9 f9002bfb aa0003fa 2a0103f5 9120e017 91212016 9121601b aa1b03e0
May  2 14:11:21 deadfire3 kernel: [ 8675.700999] 00a4  9410778f f9441f40 d10d2013 f9400014 d10d2294 eb0002ff 54000340 d2802019
May  2 14:11:21 deadfire3 kernel: [ 8675.709312] 00c4  d2804018 aa1303e0 2a1503e1 97ffb642 f941aa60 f941a662 f9000440 f9000002
May  2 14:11:21 deadfire3 kernel: [ 8675.717628]
May  2 14:11:21 deadfire3 kernel: [ 8675.717628] SP: 0xffffffc0d6313cc0:
May  2 14:11:21 deadfire3 kernel: [ 8675.722588] 3cc0  00000001 00000000 00000001 00000000 00000005 00000000 01003c90 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.730904] 3ce0  000d0ed8 ffffffc0 d6313e20 ffffffc0 fc82e1d0 ffffffc0 00000001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.739213] 3d00  d6310000 ffffffc0 d6313d40 ffffffc0 00750064 ffffffc0 d6313d40 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.747528] 3d20  0074fe10 ffffffc0 60000145 00000000 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.755847] 3d40  d6313d70 ffffffc0 00750064 ffffffc0 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.764158] 3d60  fc82e41c ffffffc0 014179f0 ffffffc0 d6313da0 ffffffc0 007505d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.772466] 3d80  fc82dbc0 ffffffc0 faff0400 ffffffc0 000021e3 00000000 171ca58d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.780775] 3da0  d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.789088]
May  2 14:11:21 deadfire3 kernel: [ 8675.789088] X5: 0xffffffffc465ff7f:
May  2 14:11:21 deadfire3 kernel: [ 8675.794048] ff7c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.802375] ff9c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.810687] ffbc  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.819006] ffdc  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.827325] fffc  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.835638] 001c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.843951] 003c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.852279] 005c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.860607] 007c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.868929]
May  2 14:11:21 deadfire3 kernel: [ 8675.868929] X9: 0xffffffc0d6313b40:
May  2 14:11:21 deadfire3 kernel: [ 8675.873893] 3b40  d6313ba0 ffffffc0 000813a8 ffffffc0 00000000 00000000 00000400 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.882220] 3b60  d6313b70 ffffffc0 00081214 ffffffc0 d6313d40 ffffffc0 00084c30 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.890536] 3b80  fc82dbc0 ffffffc0 00000001 00000000 d6313d40 ffffffc0 0074fe10 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.898846] 3ba0  40000000 00000000 d6310000 ffffffc0 d6313d10 ffffffc0 00084e1c ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.907164] 3bc0  d6313c00 ffffffc0 0039fe4c ffffffc0 00000002 00000000 fdda90a0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.915484] 3be0  00000000 00000000 0003de80 00000000 d6313d90 ffffffc0 00000005 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.923795] 3c00  d6313ce0 ffffffc0 003a03fc ffffffc0 00000002 00000000 0003de80 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.932117] 3c20  00000014 00000000 0009908f 00000000 00099090 00000000 000021e3 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.940405]
May  2 14:11:21 deadfire3 kernel: [ 8675.940405] X19: 0xffffffc0fc82db40:
May  2 14:11:21 deadfire3 kernel: [ 8675.945450] db40  00000040 00000001 00000001 00000001 00000002 00000000 00000001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.953766] db60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.962082] db80  00008119 00000000 00000000 00000000 fd15d240 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.970388] dba0  00000000 00000000 00000000 00000000 00000004 00000000 012a8368 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.978696] dbc0  00000000 00000000 00000000 00000000 fd59c958 ffffffc0 fc82d298 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.987008] dbe0  fc8280e8 ffffffc0 00000004 00000000 fc82df20 ffffffc0 00010001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.995321] dc00  00000000 00000000 00000000 00010001 00010001 00000000 fc82dfd0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.003639] dc20  fd6ddac0 ffffffc0 00000000 00000000 00000001 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.011955]
May  2 14:11:21 deadfire3 kernel: [ 8676.011955] X23: 0xffffffc001003c10:
May  2 14:11:21 deadfire3 kernel: [ 8676.017003] 3c10  67697326 61773e2d 635f7469 65646c68 00746978 00000000 67697326 72673e2d
May  2 14:11:21 deadfire3 kernel: [ 8676.025326] 3c30  5f70756f 65737772 0000006d 00000000 67697326 72633e2d 675f6465 64726175
May  2 14:11:21 deadfire3 kernel: [ 8676.033642] 3c50  74756d5f 00007865 6d6f682f 6b732f65 6f696479 69766e2f 5f616964 6e72656b
May  2 14:11:21 deadfire3 kernel: [ 8676.041957] 3c70  692f6c65 756c636e 6c2f6564 78756e69 636f692f 65746e6f 682e7478 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.050273] 3c90  6d6f682f 6b732f65 6f696479 69766e2f 5f616964 6e72656b 692f6c65 756c636e
May  2 14:11:21 deadfire3 kernel: [ 8676.058584] 3cb0  6c2f6564 78756e69 6572662f 72657a65 0000682e 00000000 6b736174 7274735f
May  2 14:11:21 deadfire3 kernel: [ 8676.066901] 3cd0  00746375 00000000 7465735f 6469745f 6464615f 73736572 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.075215] 3cf0  2d6d6d26 616d6d3e 65735f70 0000006d 3e2d7826 74696177 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.083537]
May  2 14:11:21 deadfire3 kernel: [ 8676.083537] X24: 0xffffffc0000d0e58:
May  2 14:11:21 deadfire3 kernel: [ 8676.088587] 0e58  910003e1 9272c424 f9400884 f900009f 942a7540 aa0003f5 91006264 f9400e65
May  2 14:11:21 deadfire3 kernel: [ 8676.096899] 0e78  eb05009f 540000e0 f9400483 f90004a3 f9000065 f9000e64 f9000484 14000009
May  2 14:11:21 deadfire3 kernel: [ 8676.105217] 0e98  91002280 f9400681 eb00003f 540000a0 aa1403e0 2a1703e1 aa1603e2 94002435
May  2 14:11:21 deadfire3 kernel: [ 8676.113529] 0eb8  aa1403e0 aa1503e1 942a75a6 a94153f3 a9425bf5 f9401bf7 a8c47bfd d65f03c0
May  2 14:11:21 deadfire3 kernel: [ 8676.121842] 0ed8  a9be7bfd 910003fd f9000bf3 aa0003f3 940045e3 34000100 91006261 f9401262
May  2 14:11:21 deadfire3 kernel: [ 8676.130150] 0ef8  f9400e63 f9000462 f9000043 f9000e61 f9000421 f9400bf3 a8c27bfd d65f03c0
May  2 14:11:21 deadfire3 kernel: [ 8676.138460] 0f18  a9bf7bfd 910003fd aa0003e4 f85f0005 f9400066 52800000 eb0600bf 54000201
May  2 14:11:21 deadfire3 kernel: [ 8676.146766] 0f38  b85f8086 b9400867 6b0700df 54000181 1100fcc0 6b1f00df 1a86b000 13067c00
May  2 14:11:21 deadfire3 kernel: [ 8676.155093]
May  2 14:11:21 deadfire3 kernel: [ 8676.155093] X25: 0xffffffc0d6313da0:
May  2 14:11:21 deadfire3 kernel: [ 8676.160147] 3da0  d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.168486] 3dc0  01003d00 ffffffc0 fc82dbc0 ffffffc0 00750460 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.176804] 3de0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.185115] 3e00  d19a7b50 ffffffc0 00000000 00000000 fe172fc0 ffffffc0 000d0ed8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.193427] 3e20  d6313e20 ffffffc0 d6313e20 ffffffc0 00000000 00000000 00085520 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.201735] 3e40  000d03f8 ffffffc0 d19a7b50 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.210050] 3e60  00000000 00000000 000dcc5c ffffffc0 d6313eb0 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.218364] 3e80  1fe585c0 ffffffc0 fc82dbc0 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.226676]
May  2 14:11:21 deadfire3 kernel: [ 8676.226676] X26: 0xffffffc0fc82e150:
May  2 14:11:21 deadfire3 kernel: [ 8676.231725] e150  00000000 00000000 00000000 00000000 00000005 00000005 00000005 00000005
May  2 14:11:21 deadfire3 kernel: [ 8676.240036] e170  00000004 ffffffc0 faff0400 ffffffc0 d3572800 ffffffc0 fb3e3800 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.248351] e190  00000014 00000000 00000002 fd96d6ac 0269bf88 00000000 fe3fb0c0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.256661] e1b0  fe172fc0 ffffffc0 f82df82d 00000000 fc82e1c0 ffffffc0 fc82e1c0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.264971] e1d0  a1f7a1f7 00000000 fc82e1d8 ffffffc0 fc82e1d8 ffffffc0 00000001 00000017
May  2 14:11:21 deadfire3 kernel: [ 8676.273293] e1f0  00000000 00000000 fc82dfe8 ffffffc0 d51bb540 ffffffc0 00c315d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.281618] e210  00c2fa00 ffffffc0 fc82dbc0 ffffffc0 00000378 00002000 00000000 00000002
May  2 14:11:21 deadfire3 kernel: [ 8676.289932] e230  fab3c800 ffffffc0 faff0400 ffffffc0 d3572800 ffffffc0 fb3e3800 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.298251]
May  2 14:11:21 deadfire3 kernel: [ 8676.298251] X28: 0xffffffc0d630ff80:
May  2 14:11:21 deadfire3 kernel: [ 8676.303298] ff80  cfc4c4cf c2cfc4c2 c3c2cfc4 cbbfc1ce becbbfbe bfbecbbf cbbfbecb becbbfbe
May  2 14:11:21 deadfire3 kernel: [ 8676.311611] ffa0  c1bfccc1 cbbfbfcc becbbfbe c1becac1 c9bebeca bdc8bdbf bcbac7bc c8bfbac7
May  2 14:11:21 deadfire3 kernel: [ 8676.319925] ffc0  bbc8bfbb bfbdc7bf c6bbbdc7 b9c6bbb9 bab8c5ba c6bbb8c5 b8c5bab9 bab9c6bb
May  2 14:11:21 deadfire3 kernel: [ 8676.328234] ffe0  c5bab8c5 b9c6bbb8 b9b7c4b9 c3bab7c4 b8c1b9b9 bab9c3ba c3bab9c3 bac4bbb9
May  2 14:11:21 deadfire3 kernel: [ 8676.336550] 0000  00000002 00000000 ffffffff ffffffff fe172fc0 ffffffc0 000bce50 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.344860] 0020  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.353174] 0040  00000000 00000000 00000002 00000002 00000100 00000000 57ac6e9d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.361500] 0060  3f37363d 343e3535 38364038 41393640 36403838 38364038 41393640 36403838
May  2 14:11:21 deadfire3 kernel: [ 8676.369811]
May  2 14:11:21 deadfire3 kernel: [ 8676.369811] X29: 0xffffffc0d6313cc0:
May  2 14:11:21 deadfire3 kernel: [ 8676.374859] 3cc0  00000001 00000000 00000001 00000000 00000005 00000000 01003c90 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.383182] 3ce0  000d0ed8 ffffffc0 d6313e20 ffffffc0 fc82e1d0 ffffffc0 00000001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.391504] 3d00  d6310000 ffffffc0 d6313d40 ffffffc0 00750064 ffffffc0 d6313d40 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.399822] 3d20  0074fe10 ffffffc0 60000145 00000000 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.408149] 3d40  d6313d70 ffffffc0 00750064 ffffffc0 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.416461] 3d60  fc82e41c ffffffc0 014179f0 ffffffc0 d6313da0 ffffffc0 007505d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.424782] 3d80  fc82dbc0 ffffffc0 faff0400 ffffffc0 000021e3 00000000 171ca58d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.433094] 3da0  d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.441410]
May  2 14:11:21 deadfire3 kernel: [ 8676.442904] Process vi-output-4, tc (pid: 20545, stack limit = 0xffffffc0d6310058)
May  2 14:11:21 deadfire3 kernel: [ 8676.450467] Stack: (0xffffffc0d6313d40 to 0xffffffc0d6314000)
May  2 14:11:21 deadfire3 kernel: [ 8676.456212] 3d40: d6313d70 ffffffc0 00750064 ffffffc0 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.464382] 3d60: fc82e41c ffffffc0 014179f0 ffffffc0 d6313da0 ffffffc0 007505d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.472553] 3d80: fc82dbc0 ffffffc0 faff0400 ffffffc0 000021e3 00000000 171ca58d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.480723] 3da0: d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.488893] 3dc0: 01003d00 ffffffc0 fc82dbc0 ffffffc0 00750460 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.497062] 3de0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.505234] 3e00: d19a7b50 ffffffc0 00000000 00000000 fe172fc0 ffffffc0 000d0ed8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.513406] 3e20: d6313e20 ffffffc0 d6313e20 ffffffc0 00000000 00000000 00085520 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.521576] 3e40: 000d03f8 ffffffc0 d19a7b50 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.529748] 3e60: 00000000 00000000 000dcc5c ffffffc0 d6313eb0 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.537918] 3e80: 1fe585c0 ffffffc0 fc82dbc0 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.546088] 3ea0: d6313ea0 ffffffc0 d6313ea0 ffffffc0 00000000 00000000 00000000 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.554258] 3ec0: d6313ec0 ffffffc0 d6313ec0 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.562428] 3ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.570599] 3f00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.578769] 3f20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.586940] 3f40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.595110] 3f60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.603282] 3f80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.611450] 3fa0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.619620] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000005 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.627792] 3fe0: 00000000 00000000 00000000 00000000 565c4b45 7f797f5c a79a9499 797fa8a2
May  2 14:11:21 deadfire3 kernel: [ 8676.635960] Call trace:
May  2 14:11:21 deadfire3 kernel: [ 8676.638409] [&amp;lt;ffffffc00074fe10&amp;gt;] free_ring_buffers+0x3c/0xd0
May  2 14:11:21 deadfire3 kernel: [ 8676.644065] [&amp;lt;ffffffc000750064&amp;gt;] tegra_channel_release_frame+0xa0/0xac
May  2 14:11:21 deadfire3 kernel: [ 8676.650587] [&amp;lt;ffffffc0007505d8&amp;gt;] tegra_channel_kthread_release+0x178/0x1a4
May  2 14:11:21 deadfire3 kernel: [ 8676.657455] [&amp;lt;ffffffc0000d04b8&amp;gt;] kthread+0xc0/0xc8
May  2 14:11:21 deadfire3 kernel: [ 8676.662245] Code: f8607a60 b948d661 11000422 b908d662 (b9003801)
May  2 14:11:21 deadfire3 kernel: [ 8676.674126] ---[ end trace 7a9d03f4c84d921b ]---

&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="section" id="userspace-thread"&gt;
&lt;h3&gt;Userspace thread&lt;/h3&gt;
&lt;pre class="literal-block"&gt;
May  2 14:11:20 deadfire3 kernel: [ 8675.391692] video4linux video3: frame start syncpt timeout!0
May  2 14:11:20 deadfire3 kernel: [ 8675.399203] Unable to handle kernel NULL pointer dereference at virtual address 0000004c
May  2 14:11:20 deadfire3 kernel: [ 8675.411531] pgd = ffffffc00007d000
May  2 14:11:21 deadfire3 kernel: [ 8675.414938] [0000004c] *pgd=000000017fc05003, *pmd=000000017fc06003, *pte=00e0000050041407
May  2 14:11:21 deadfire3 kernel: [ 8675.423853] Internal error: Oops: 96000046 [#1] PREEMPT SMP
May  2 14:11:21 deadfire3 kernel: [ 8675.429421] Enter nvdumper_crash_setup_regs
May  2 14:11:21 deadfire3 kernel: [ 8675.433608] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.433610] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.433611] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.446934] nvdumper: all registers are saved.
May  2 14:11:21 deadfire3 kernel: [ 8675.451375] Modules linked in: bcmdhd cfg80211 bluedroid_pm
May  2 14:11:21 deadfire3 kernel: [ 8675.457020] CPU: 2 PID: 20545 Comm: vi-output-4, tc Not tainted 3.10.96-skydio-gc145d3a6e8d-dirty #147
May  2 14:11:21 deadfire3 kernel: [ 8675.466318] task: ffffffc0fe172fc0 ti: ffffffc0d6310000 task.ti: ffffffc0d6310000
May  2 14:11:21 deadfire3 kernel: [ 8675.473802] PC is at free_ring_buffers+0x3c/0xd0
May  2 14:11:21 deadfire3 kernel: [ 8675.478420] LR is at tegra_channel_release_frame+0xa0/0xac
May  2 14:11:21 deadfire3 kernel: [ 8675.483902] pc : [&amp;lt;ffffffc00074fe10&amp;gt;] lr : [&amp;lt;ffffffc000750064&amp;gt;] pstate: 60000145
May  2 14:11:21 deadfire3 kernel: [ 8675.491290] sp : ffffffc0d6313d40
May  2 14:11:21 deadfire3 kernel: [ 8675.494609] x29: ffffffc0d6313d40 x28: ffffffc0d6310000
May  2 14:11:21 deadfire3 kernel: [ 8675.499947] x27: 0000000000000001 x26: ffffffc0fc82e1d0
May  2 14:11:21 deadfire3 kernel: [ 8675.505287] x25: ffffffc0d6313e20 x24: ffffffc0000d0ed8
May  2 14:11:21 deadfire3 kernel: [ 8675.510630] x23: ffffffc001003c90 x22: 0000000000000005
May  2 14:11:21 deadfire3 kernel: [ 8675.515969] x21: 0000000000000001 x20: 0000000000000001
May  2 14:11:21 deadfire3 kernel: [ 8675.521310] x19: ffffffc0fc82dbc0 x18: 000000000000013f
May  2 14:11:21 deadfire3 kernel: [ 8675.526649] x17: 0000007f993c130c x16: 0000000000000000
May  2 14:11:21 deadfire3 kernel: [ 8675.531985] x15: 0000000000000000 x14: 0000000000000001
May  2 14:11:21 deadfire3 kernel: [ 8675.537324] x13: 000000000000002b x12: 0000000000000150
May  2 14:11:21 deadfire3 kernel: [ 8675.542664] x11: 0000000000129fbe x10: 00000000ffa722d2
May  2 14:11:21 deadfire3 kernel: [ 8675.548001] x9 : ffffffc0d6313bc0 x8 : 00ffffffffffffff
May  2 14:11:21 deadfire3 kernel: [ 8675.553341] x7 : 0000000034155555 x6 : 00000000000021e2
May  2 14:11:21 deadfire3 kernel: [ 8675.558679] x5 : ffffffffc465ffff x4 : 000000000000c9ff
May  2 14:11:21 deadfire3 kernel: [ 8675.564015] x3 : 00000000000021e3 x2 : 0000000000099090
May  2 14:11:21 deadfire3 kernel: [ 8675.569352] x1 : 000000000009908f x0 : 0000000000000014
May  2 14:11:21 deadfire3 kernel: [ 8675.574691]
May  2 14:11:21 deadfire3 kernel: [ 8675.574691] PC: 0xffffffc00074fd90:
May  2 14:11:21 deadfire3 kernel: [ 8675.579652] fd90  f9400400 b94002a1 97f13b13 f9422a60 f9400400 b9400ea1 97f13b0f 91000694
May  2 14:11:21 deadfire3 kernel: [ 8675.587966] fdb0  910012b5 4b170280 6b0002df 54fffd8c a94153f3 a9425bf5 f9401bf7 a8c47bfd
May  2 14:11:21 deadfire3 kernel: [ 8675.596281] fdd0  d65f03c0 a9bd7bfd 910003fd a90153f3 a9025bf5 aa0003f3 2a0103f4 34000541
May  2 14:11:21 deadfire3 kernel: [ 8675.604594] fdf0  52800035 528000b6 b945da60 9102d800 f8607a60 b948d661 11000422 b908d662
May  2 14:11:21 deadfire3 kernel: [ 8675.612916] fe10  b9003801 b9001015 b9450e62 b9426001 34000041 b9005802 b9491661 7100043f
May  2 14:11:21 deadfire3 kernel: [ 8675.621228] fe30  54000081 b945e261 7100043f 54000088 b945da61 9105a021 b8217a76 b945da61
May  2 14:11:21 deadfire3 kernel: [ 8675.629545] fe50  11000422 b905da62 8b214a61 b945a021 97ffb6de b945da60 71000c1f 54000049
May  2 14:11:21 deadfire3 kernel: [ 8675.637852] fe70  b905da7f b945de60 51000400 b905de60 b945e260 11000400 b905e260 71000694
May  2 14:11:21 deadfire3 kernel: [ 8675.646160]
May  2 14:11:21 deadfire3 kernel: [ 8675.646160] LR: 0xffffffc00074ffe4:
May  2 14:11:21 deadfire3 kernel: [ 8675.651123] ffe4  d63f0060 34000160 aa1303e0 97ffff48 52800040 b9091660 aa1303e0 aa1403e1
May  2 14:11:21 deadfire3 kernel: [ 8675.659443] 0004  910083a2 528000a3 97ffffa6 14000015 f0006400 794bf400 36100160 f0006400
May  2 14:11:21 deadfire3 kernel: [ 8675.667753] 0024  91162000 91014000 91026261 f0004b62 91256042 b0002703 9104e063 9101e063
May  2 14:11:21 deadfire3 kernel: [ 8675.676071] 0044  97efd5f4 b945da60 9105a000 52800081 b8207a61 aa1303e0 52800021 97ffff5d
May  2 14:11:21 deadfire3 kernel: [ 8675.684381] 0064  a94153f3 a8c37bfd d65f03c0 a9ba7bfd 910003fd a90153f3 a9025bf5 a90363f7
May  2 14:11:21 deadfire3 kernel: [ 8675.692691] 0084  a9046bf9 f9002bfb aa0003fa 2a0103f5 9120e017 91212016 9121601b aa1b03e0
May  2 14:11:21 deadfire3 kernel: [ 8675.700999] 00a4  9410778f f9441f40 d10d2013 f9400014 d10d2294 eb0002ff 54000340 d2802019
May  2 14:11:21 deadfire3 kernel: [ 8675.709312] 00c4  d2804018 aa1303e0 2a1503e1 97ffb642 f941aa60 f941a662 f9000440 f9000002
May  2 14:11:21 deadfire3 kernel: [ 8675.717628]
May  2 14:11:21 deadfire3 kernel: [ 8675.717628] SP: 0xffffffc0d6313cc0:
May  2 14:11:21 deadfire3 kernel: [ 8675.722588] 3cc0  00000001 00000000 00000001 00000000 00000005 00000000 01003c90 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.730904] 3ce0  000d0ed8 ffffffc0 d6313e20 ffffffc0 fc82e1d0 ffffffc0 00000001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.739213] 3d00  d6310000 ffffffc0 d6313d40 ffffffc0 00750064 ffffffc0 d6313d40 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.747528] 3d20  0074fe10 ffffffc0 60000145 00000000 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.755847] 3d40  d6313d70 ffffffc0 00750064 ffffffc0 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.764158] 3d60  fc82e41c ffffffc0 014179f0 ffffffc0 d6313da0 ffffffc0 007505d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.772466] 3d80  fc82dbc0 ffffffc0 faff0400 ffffffc0 000021e3 00000000 171ca58d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.780775] 3da0  d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.789088]
May  2 14:11:21 deadfire3 kernel: [ 8675.789088] X5: 0xffffffffc465ff7f:
May  2 14:11:21 deadfire3 kernel: [ 8675.794048] ff7c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.802375] ff9c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.810687] ffbc  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.819006] ffdc  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.827325] fffc  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.835638] 001c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.843951] 003c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.852279] 005c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.860607] 007c  ******** ******** ******** ******** ******** ******** ******** ********
May  2 14:11:21 deadfire3 kernel: [ 8675.868929]
May  2 14:11:21 deadfire3 kernel: [ 8675.868929] X9: 0xffffffc0d6313b40:
May  2 14:11:21 deadfire3 kernel: [ 8675.873893] 3b40  d6313ba0 ffffffc0 000813a8 ffffffc0 00000000 00000000 00000400 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.882220] 3b60  d6313b70 ffffffc0 00081214 ffffffc0 d6313d40 ffffffc0 00084c30 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.890536] 3b80  fc82dbc0 ffffffc0 00000001 00000000 d6313d40 ffffffc0 0074fe10 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.898846] 3ba0  40000000 00000000 d6310000 ffffffc0 d6313d10 ffffffc0 00084e1c ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.907164] 3bc0  d6313c00 ffffffc0 0039fe4c ffffffc0 00000002 00000000 fdda90a0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.915484] 3be0  00000000 00000000 0003de80 00000000 d6313d90 ffffffc0 00000005 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.923795] 3c00  d6313ce0 ffffffc0 003a03fc ffffffc0 00000002 00000000 0003de80 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.932117] 3c20  00000014 00000000 0009908f 00000000 00099090 00000000 000021e3 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.940405]
May  2 14:11:21 deadfire3 kernel: [ 8675.940405] X19: 0xffffffc0fc82db40:
May  2 14:11:21 deadfire3 kernel: [ 8675.945450] db40  00000040 00000001 00000001 00000001 00000002 00000000 00000001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.953766] db60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.962082] db80  00008119 00000000 00000000 00000000 fd15d240 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.970388] dba0  00000000 00000000 00000000 00000000 00000004 00000000 012a8368 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.978696] dbc0  00000000 00000000 00000000 00000000 fd59c958 ffffffc0 fc82d298 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8675.987008] dbe0  fc8280e8 ffffffc0 00000004 00000000 fc82df20 ffffffc0 00010001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8675.995321] dc00  00000000 00000000 00000000 00010001 00010001 00000000 fc82dfd0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.003639] dc20  fd6ddac0 ffffffc0 00000000 00000000 00000001 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.011955]
May  2 14:11:21 deadfire3 kernel: [ 8676.011955] X23: 0xffffffc001003c10:
May  2 14:11:21 deadfire3 kernel: [ 8676.017003] 3c10  67697326 61773e2d 635f7469 65646c68 00746978 00000000 67697326 72673e2d
May  2 14:11:21 deadfire3 kernel: [ 8676.025326] 3c30  5f70756f 65737772 0000006d 00000000 67697326 72633e2d 675f6465 64726175
May  2 14:11:21 deadfire3 kernel: [ 8676.033642] 3c50  74756d5f 00007865 6d6f682f 6b732f65 6f696479 69766e2f 5f616964 6e72656b
May  2 14:11:21 deadfire3 kernel: [ 8676.041957] 3c70  692f6c65 756c636e 6c2f6564 78756e69 636f692f 65746e6f 682e7478 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.050273] 3c90  6d6f682f 6b732f65 6f696479 69766e2f 5f616964 6e72656b 692f6c65 756c636e
May  2 14:11:21 deadfire3 kernel: [ 8676.058584] 3cb0  6c2f6564 78756e69 6572662f 72657a65 0000682e 00000000 6b736174 7274735f
May  2 14:11:21 deadfire3 kernel: [ 8676.066901] 3cd0  00746375 00000000 7465735f 6469745f 6464615f 73736572 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.075215] 3cf0  2d6d6d26 616d6d3e 65735f70 0000006d 3e2d7826 74696177 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.083537]
May  2 14:11:21 deadfire3 kernel: [ 8676.083537] X24: 0xffffffc0000d0e58:
May  2 14:11:21 deadfire3 kernel: [ 8676.088587] 0e58  910003e1 9272c424 f9400884 f900009f 942a7540 aa0003f5 91006264 f9400e65
May  2 14:11:21 deadfire3 kernel: [ 8676.096899] 0e78  eb05009f 540000e0 f9400483 f90004a3 f9000065 f9000e64 f9000484 14000009
May  2 14:11:21 deadfire3 kernel: [ 8676.105217] 0e98  91002280 f9400681 eb00003f 540000a0 aa1403e0 2a1703e1 aa1603e2 94002435
May  2 14:11:21 deadfire3 kernel: [ 8676.113529] 0eb8  aa1403e0 aa1503e1 942a75a6 a94153f3 a9425bf5 f9401bf7 a8c47bfd d65f03c0
May  2 14:11:21 deadfire3 kernel: [ 8676.121842] 0ed8  a9be7bfd 910003fd f9000bf3 aa0003f3 940045e3 34000100 91006261 f9401262
May  2 14:11:21 deadfire3 kernel: [ 8676.130150] 0ef8  f9400e63 f9000462 f9000043 f9000e61 f9000421 f9400bf3 a8c27bfd d65f03c0
May  2 14:11:21 deadfire3 kernel: [ 8676.138460] 0f18  a9bf7bfd 910003fd aa0003e4 f85f0005 f9400066 52800000 eb0600bf 54000201
May  2 14:11:21 deadfire3 kernel: [ 8676.146766] 0f38  b85f8086 b9400867 6b0700df 54000181 1100fcc0 6b1f00df 1a86b000 13067c00
May  2 14:11:21 deadfire3 kernel: [ 8676.155093]
May  2 14:11:21 deadfire3 kernel: [ 8676.155093] X25: 0xffffffc0d6313da0:
May  2 14:11:21 deadfire3 kernel: [ 8676.160147] 3da0  d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.168486] 3dc0  01003d00 ffffffc0 fc82dbc0 ffffffc0 00750460 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.176804] 3de0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.185115] 3e00  d19a7b50 ffffffc0 00000000 00000000 fe172fc0 ffffffc0 000d0ed8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.193427] 3e20  d6313e20 ffffffc0 d6313e20 ffffffc0 00000000 00000000 00085520 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.201735] 3e40  000d03f8 ffffffc0 d19a7b50 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.210050] 3e60  00000000 00000000 000dcc5c ffffffc0 d6313eb0 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.218364] 3e80  1fe585c0 ffffffc0 fc82dbc0 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.226676]
May  2 14:11:21 deadfire3 kernel: [ 8676.226676] X26: 0xffffffc0fc82e150:
May  2 14:11:21 deadfire3 kernel: [ 8676.231725] e150  00000000 00000000 00000000 00000000 00000005 00000005 00000005 00000005
May  2 14:11:21 deadfire3 kernel: [ 8676.240036] e170  00000004 ffffffc0 faff0400 ffffffc0 d3572800 ffffffc0 fb3e3800 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.248351] e190  00000014 00000000 00000002 fd96d6ac 0269bf88 00000000 fe3fb0c0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.256661] e1b0  fe172fc0 ffffffc0 f82df82d 00000000 fc82e1c0 ffffffc0 fc82e1c0 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.264971] e1d0  a1f7a1f7 00000000 fc82e1d8 ffffffc0 fc82e1d8 ffffffc0 00000001 00000017
May  2 14:11:21 deadfire3 kernel: [ 8676.273293] e1f0  00000000 00000000 fc82dfe8 ffffffc0 d51bb540 ffffffc0 00c315d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.281618] e210  00c2fa00 ffffffc0 fc82dbc0 ffffffc0 00000378 00002000 00000000 00000002
May  2 14:11:21 deadfire3 kernel: [ 8676.289932] e230  fab3c800 ffffffc0 faff0400 ffffffc0 d3572800 ffffffc0 fb3e3800 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.298251]
May  2 14:11:21 deadfire3 kernel: [ 8676.298251] X28: 0xffffffc0d630ff80:
May  2 14:11:21 deadfire3 kernel: [ 8676.303298] ff80  cfc4c4cf c2cfc4c2 c3c2cfc4 cbbfc1ce becbbfbe bfbecbbf cbbfbecb becbbfbe
May  2 14:11:21 deadfire3 kernel: [ 8676.311611] ffa0  c1bfccc1 cbbfbfcc becbbfbe c1becac1 c9bebeca bdc8bdbf bcbac7bc c8bfbac7
May  2 14:11:21 deadfire3 kernel: [ 8676.319925] ffc0  bbc8bfbb bfbdc7bf c6bbbdc7 b9c6bbb9 bab8c5ba c6bbb8c5 b8c5bab9 bab9c6bb
May  2 14:11:21 deadfire3 kernel: [ 8676.328234] ffe0  c5bab8c5 b9c6bbb8 b9b7c4b9 c3bab7c4 b8c1b9b9 bab9c3ba c3bab9c3 bac4bbb9
May  2 14:11:21 deadfire3 kernel: [ 8676.336550] 0000  00000002 00000000 ffffffff ffffffff fe172fc0 ffffffc0 000bce50 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.344860] 0020  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.353174] 0040  00000000 00000000 00000002 00000002 00000100 00000000 57ac6e9d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.361500] 0060  3f37363d 343e3535 38364038 41393640 36403838 38364038 41393640 36403838
May  2 14:11:21 deadfire3 kernel: [ 8676.369811]
May  2 14:11:21 deadfire3 kernel: [ 8676.369811] X29: 0xffffffc0d6313cc0:
May  2 14:11:21 deadfire3 kernel: [ 8676.374859] 3cc0  00000001 00000000 00000001 00000000 00000005 00000000 01003c90 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.383182] 3ce0  000d0ed8 ffffffc0 d6313e20 ffffffc0 fc82e1d0 ffffffc0 00000001 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.391504] 3d00  d6310000 ffffffc0 d6313d40 ffffffc0 00750064 ffffffc0 d6313d40 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.399822] 3d20  0074fe10 ffffffc0 60000145 00000000 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.408149] 3d40  d6313d70 ffffffc0 00750064 ffffffc0 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.416461] 3d60  fc82e41c ffffffc0 014179f0 ffffffc0 d6313da0 ffffffc0 007505d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.424782] 3d80  fc82dbc0 ffffffc0 faff0400 ffffffc0 000021e3 00000000 171ca58d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.433094] 3da0  d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.441410]
May  2 14:11:21 deadfire3 kernel: [ 8676.442904] Process vi-output-4, tc (pid: 20545, stack limit = 0xffffffc0d6310058)
May  2 14:11:21 deadfire3 kernel: [ 8676.450467] Stack: (0xffffffc0d6313d40 to 0xffffffc0d6314000)
May  2 14:11:21 deadfire3 kernel: [ 8676.456212] 3d40: d6313d70 ffffffc0 00750064 ffffffc0 fc82dbc0 ffffffc0 faff0400 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.464382] 3d60: fc82e41c ffffffc0 014179f0 ffffffc0 d6313da0 ffffffc0 007505d8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.472553] 3d80: fc82dbc0 ffffffc0 faff0400 ffffffc0 000021e3 00000000 171ca58d 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.480723] 3da0: d6313e30 ffffffc0 000d04b8 ffffffc0 d19a7b50 ffffffc0 01415b28 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.488893] 3dc0: 01003d00 ffffffc0 fc82dbc0 ffffffc0 00750460 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.497062] 3de0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.505234] 3e00: d19a7b50 ffffffc0 00000000 00000000 fe172fc0 ffffffc0 000d0ed8 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.513406] 3e20: d6313e20 ffffffc0 d6313e20 ffffffc0 00000000 00000000 00085520 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.521576] 3e40: 000d03f8 ffffffc0 d19a7b50 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.529748] 3e60: 00000000 00000000 000dcc5c ffffffc0 d6313eb0 ffffffc0 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.537918] 3e80: 1fe585c0 ffffffc0 fc82dbc0 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.546088] 3ea0: d6313ea0 ffffffc0 d6313ea0 ffffffc0 00000000 00000000 00000000 ffffffc0
May  2 14:11:21 deadfire3 kernel: [ 8676.554258] 3ec0: d6313ec0 ffffffc0 d6313ec0 ffffffc0 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.562428] 3ee0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.570599] 3f00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.578769] 3f20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.586940] 3f40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.595110] 3f60: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.603282] 3f80: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.611450] 3fa0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.619620] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000005 00000000
May  2 14:11:21 deadfire3 kernel: [ 8676.627792] 3fe0: 00000000 00000000 00000000 00000000 565c4b45 7f797f5c a79a9499 797fa8a2
May  2 14:11:21 deadfire3 kernel: [ 8676.635960] Call trace:
May  2 14:11:21 deadfire3 kernel: [ 8676.638409] [&amp;lt;ffffffc00074fe10&amp;gt;] free_ring_buffers+0x3c/0xd0
May  2 14:11:21 deadfire3 kernel: [ 8676.644065] [&amp;lt;ffffffc000750064&amp;gt;] tegra_channel_release_frame+0xa0/0xac
May  2 14:11:21 deadfire3 kernel: [ 8676.650587] [&amp;lt;ffffffc0007505d8&amp;gt;] tegra_channel_kthread_release+0x178/0x1a4
May  2 14:11:21 deadfire3 kernel: [ 8676.657455] [&amp;lt;ffffffc0000d04b8&amp;gt;] kthread+0xc0/0xc8
May  2 14:11:21 deadfire3 kernel: [ 8676.662245] Code: f8607a60 b948d661 11000422 b908d662 (b9003801)
May  2 14:11:21 deadfire3 kernel: [ 8676.674126] ---[ end trace 7a9d03f4c84d921b ]---


## Userspace thread


May  4 09:44:30 deadfire3 kernel: [   60.123409] platform d.regulator: Driver reg-fixed-sync-voltage requests probe deferral
May  4 09:45:41 deadfire3 kernel: [  131.530657] tc358840 1-000f: enable_stream: disable
May  4 09:45:41 deadfire3 kernel: [  131.532778] tc358840 1-000f: tc358840_set_csi: Enabling CSI TX0
May  4 09:45:41 deadfire3 kernel: [  131.533126] tc358840 1-000f: tc358840_set_pll:
May  4 09:45:41 deadfire3 kernel: [  131.533132] tc358840 1-000f: tc358840_set_pll: Updating PLL clock of CSI TX0, hsck=549818136
May  4 09:45:41 deadfire3 kernel: [  131.550845] tc358840 1-000f: tc358840_set_csi: Disabling CSI TX1
May  4 09:45:44 deadfire3 kernel: [  134.602004] tc358840 1-000f: enable_stream: enable
May  4 09:45:44 deadfire3 kernel: [  134.604160] tc358840 1-000f: enable_stream: Stream enabled! Remaining timeout attempts: 100
May  4 09:45:44 deadfire3 kernel: [  134.811831] video4linux video3: frame start syncpt timeout!0
May  4 09:46:04 deadfire3 kernel: [  154.831841] video4linux video3: MW_ACK_DONE syncpoint time out!0
May  4 09:46:04 deadfire3 kernel: [  154.838520] Unable to handle kernel paging request at virtual address dead000000100108
May  4 09:46:04 deadfire3 kernel: [  154.848495] pgd = ffffffc0e0fbb000
May  4 09:46:04 deadfire3 kernel: [  154.853344] [dead000000100108] *pgd=0000000160fbc003, *pmd=0000000000000000
May  4 09:46:04 deadfire3 kernel: [  154.861295] Internal error: Oops: 96000044 [#1] PREEMPT SMP
May  4 09:46:04 deadfire3 kernel: [  154.866939] Enter nvdumper_crash_setup_regs
May  4 09:46:04 deadfire3 kernel: [  154.871340] nvdumper: all registers are saved.
May  4 09:46:04 deadfire3 kernel: [  154.871355] nvdumper: all registers are saved.
May  4 09:46:04 deadfire3 kernel: [  154.871369] nvdumper: all registers are saved.
May  4 09:46:04 deadfire3 kernel: [  154.884859] nvdumper: all registers are saved.
May  4 09:46:06 deadfire3 kernel: [  154.889358] Modules linked in: bcmdhd cfg80211 bluedroid_pm
May  4 09:46:06 deadfire3 kernel: [  154.895200] CPU: 0 PID: 1110 Comm: frontend_launch Not tainted 3.10.96-skydio-g9a5b6a4739e-dirty #151
May  4 09:46:06 deadfire3 kernel: [  154.904499] task: ffffffc0fd671000 ti: ffffffc0e0f60000 task.ti: ffffffc0e0f60000
May  4 09:46:06 deadfire3 kernel: [  154.912082] PC is at tegra_channel_queued_buf_done+0x6c/0x168
May  4 09:46:06 deadfire3 kernel: [  154.917911] LR is at tegra_channel_queued_buf_done+0x64/0x168
May  4 09:46:06 deadfire3 kernel: [  154.923725] pc : [&amp;lt;ffffffc000750060&amp;gt;] lr : [&amp;lt;ffffffc000750058&amp;gt;] pstate: 20000145
May  4 09:46:06 deadfire3 kernel: [  154.931188] sp : ffffffc0e0f63b50
May  4 09:46:06 deadfire3 kernel: [  154.934560] x29: ffffffc0e0f63b50 x28: 0000000000000001
May  4 09:46:06 deadfire3 kernel: [  154.940017] x27: ffffffc0fc016418 x26: ffffffc0fc015bc0
May  4 09:46:06 deadfire3 kernel: [  154.945461] x25: 0000000000000100 x24: 0000000000000200
May  4 09:46:06 deadfire3 kernel: [  154.950908] x23: ffffffc0fc0163f8 x22: ffffffc0fc016408
May  4 09:46:06 deadfire3 kernel: [  154.956348] x21: 0000000000000005 x20: dead0000000ffdb8
May  4 09:46:06 deadfire3 kernel: [  154.961798] x19: ffffffc0fa22d800 x18: 0000007fc334b1f4
May  4 09:46:06 deadfire3 kernel: [  154.967241] x17: 0000007f8e08b880 x16: 0000000000000000
May  4 09:46:06 deadfire3 kernel: [  154.972683] x15: 0000000000000000 x14: 0000000000000004
May  4 09:46:06 deadfire3 kernel: [  154.978124] x13: 0000000000000040 x12: 0000000000000002
May  4 09:46:06 deadfire3 kernel: [  154.983562] x11: ffffffc0e4941dc0 x10: ffffffc0e4941dc0
May  4 09:46:06 deadfire3 kernel: [  154.989005] x9 : ffffffc0e0f63880 x8 : ffffffc0fd671520
May  4 09:46:06 deadfire3 kernel: [  154.994448] x7 : ffffffc01fe58670 x6 : ffffffc001007098
May  4 09:46:06 deadfire3 kernel: [  154.999888] x5 : 0000000000000d3b x4 : 0000000000000000
May  4 09:46:06 deadfire3 kernel: [  155.005330] x3 : 0000000000000000 x2 : dead000000100100
May  4 09:46:06 deadfire3 kernel: [  155.010772] x1 : 0000000000000005 x0 : dead000000200200
May  4 09:46:06 deadfire3 kernel: [  155.016221]
May  4 09:46:06 deadfire3 kernel: [  155.016221] PC: 0xffffffc00074ffe0:
May  4 09:46:06 deadfire3 kernel: [  155.021255] ffe0  52800021 97ffff5d a94153f3 a8c37bfd d65f03c0 a9ba7bfd 910003fd a90153f3
May  4 09:46:06 deadfire3 kernel: [  155.029837] 0000  a9025bf5 a90363f7 a9046bf9 f9002bfb aa0003fa 2a0103f5 9120e017 91212016
May  4 09:46:06 deadfire3 kernel: [  155.038407] 0020  9121601b aa1b03e0 9410778e f9441f40 d10d2013 f9400014 d10d2294 eb0002ff
May  4 09:46:06 deadfire3 kernel: [  155.046986] 0040  54000340 d2802019 d2804018 aa1303e0 2a1503e1 97ffb642 f941aa60 f941a662
May  4 09:46:06 deadfire3 kernel: [  155.055559] 0060  f9000440 f9000002 aa1903e0 f2a00200 f2fbd5a0 f901a660 aa1803e2 f2a00402
May  4 09:46:06 deadfire3 kernel: [  155.064127] 0080  f2fbd5a2 f901aa62 f941a680 d10d2001 910d2280 eb0002ff 54000080 aa1403f3
May  4 09:46:06 deadfire3 kernel: [  155.072701] 00a0  aa0103f4 17ffffea aa1b03e0 941077bc 91217358 aa1803e0 9410776a f9442740
May  4 09:46:06 deadfire3 kernel: [  155.081273] 00c0  d10d2013 f9400014 d10d2294 eb0002df 54000340 d2802019 d2804017 aa1303e0
May  4 09:46:06 deadfire3 kernel: [  155.089846]
May  4 09:46:06 deadfire3 kernel: [  155.089846] LR: 0xffffffc00074ffd8:
May  4 09:46:06 deadfire3 kernel: [  155.094880] ffd8  b8207a61 aa1303e0 52800021 97ffff5d a94153f3 a8c37bfd d65f03c0 a9ba7bfd
May  4 09:46:06 deadfire3 kernel: [  155.103462] fff8  910003fd a90153f3 a9025bf5 a90363f7 a9046bf9 f9002bfb aa0003fa 2a0103f5
May  4 09:46:06 deadfire3 kernel: [  155.112038] 0018  9120e017 91212016 9121601b aa1b03e0 9410778e f9441f40 d10d2013 f9400014
May  4 09:46:06 deadfire3 kernel: [  155.120618] 0038  d10d2294 eb0002ff 54000340 d2802019 d2804018 aa1303e0 2a1503e1 97ffb642
May  4 09:46:06 deadfire3 kernel: [  155.129188] 0058  f941aa60 f941a662 f9000440 f9000002 aa1903e0 f2a00200 f2fbd5a0 f901a660
May  4 09:46:06 deadfire3 kernel: [  155.137767] 0078  aa1803e2 f2a00402 f2fbd5a2 f901aa62 f941a680 d10d2001 910d2280 eb0002ff
May  4 09:46:06 deadfire3 kernel: [  155.146329] 0098  54000080 aa1403f3 aa0103f4 17ffffea aa1b03e0 941077bc 91217358 aa1803e0
May  4 09:46:06 deadfire3 kernel: [  155.154905] 00b8  9410776a f9442740 d10d2013 f9400014 d10d2294 eb0002df 54000340 d2802019
May  4 09:46:06 deadfire3 kernel: [  155.163481]
May  4 09:46:06 deadfire3 kernel: [  155.163481] SP: 0xffffffc0e0f63ad0:
May  4 09:46:06 deadfire3 kernel: [  155.168514] 3ad0  000ffdb8 dead0000 00000005 00000000 fc016408 ffffffc0 fc0163f8 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.177084] 3af0  00000200 00000000 00000100 00000000 fc015bc0 ffffffc0 fc016418 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.185660] 3b10  00000001 00000000 e0f63b50 ffffffc0 00750058 ffffffc0 e0f63b50 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.194251] 3b30  00750060 ffffffc0 20000145 00000000 00000005 00000000 fc016408 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.202827] 3b50  e0f63bb0 ffffffc0 00750370 ffffffc0 fc015bc0 ffffffc0 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  155.211390] 3b70  fc0161e8 ffffffc0 dc99b9c0 ffffffc0 00c31238 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.219963] 3b90  00000000 00000000 e0f63d70 ffffffc0 dc9f21c0 ffffffc0 dc99b9c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.228551] 3bb0  e0f63bd0 ffffffc0 0073d5c4 ffffffc0 fc0161e8 ffffffc0 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  155.237149]
May  4 09:46:06 deadfire3 kernel: [  155.237149] X6: 0xffffffc001007018:
May  4 09:46:06 deadfire3 kernel: [  155.242185] 7018  656e203e 635f7478 3d6d6d6f 6e207325 5f747865 3d646970 6e206425 5f747865
May  4 09:46:06 deadfire3 kernel: [  155.250760] 7038  6f697270 0a64253d 00000000 00000000 6d6f682f 6b732f65 6f696479 69766e2f
May  4 09:46:06 deadfire3 kernel: [  155.259339] 7058  5f616964 6e72656b 692f6c65 756c636e 742f6564 65636172 6576652f 2f73746e
May  4 09:46:06 deadfire3 kernel: [  155.267919] 7078  65686373 00682e64 65686373 65665f64 72757461 00007365 005f4f4e 00000000
May  4 09:46:06 deadfire3 kernel: [  155.276510] 7098  6d6f682f 6b732f65 6f696479 69766e2f 5f616964 6e72656b 6b2f6c65 656e7265
May  4 09:46:06 deadfire3 kernel: [  155.285092] 70b8  63732f6c 2f646568 65726f63 0000632e 55424544 4f4c5f47 5f534b43 4e524157
May  4 09:46:06 deadfire3 kernel: [  155.293675] 70d8  284e4f5f 00297325 65727028 74706d65 756f635f 2928746e 30203c20 00000029
May  4 09:46:06 deadfire3 kernel: [  155.302251] 70f8  65727028 74706d65 756f635f 2928746e 50202620 4d454552 4d5f5450 294b5341
May  4 09:46:06 deadfire3 kernel: [  155.310836]
May  4 09:46:06 deadfire3 kernel: [  155.310836] X7: 0xffffffc01fe585f0:
May  4 09:46:06 deadfire3 kernel: [  155.315867] 85f0  ffffc74c 00000000 00000000 00000000 00000000 00000000 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  155.324447] 8610  0d927c65 00000024 473ab000 00006eab 0008f7f6 00000000 00000c00 00000000
May  4 09:46:06 deadfire3 kernel: [  155.333023] 8630  00000000 00000000 00003bb1 00000000 0003e3ab 00000000 00000c00 00000000
May  4 09:46:06 deadfire3 kernel: [  155.341599] 8650  00000000 00000000 00000003 00000003 055135ba 00000009 961304c7 00000006
May  4 09:46:06 deadfire3 kernel: [  155.350181] 8670  fd5d8e98 ffffffc0 ffde6c18 ffffffc0 fd671048 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.358764] 8690  00000000 00000000 00000000 00000000 0000023d 00000000 00000138 00000000
May  4 09:46:06 deadfire3 kernel: [  155.367334] 86b0  00000059 00000000 000240da 00000000 00000000 00000000 000240d9 00000000
May  4 09:46:06 deadfire3 kernel: [  155.375915] 86d0  000001ac 00000000 00000191 00000000 00000c00 00000000 1fe585c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.384507]
May  4 09:46:06 deadfire3 kernel: [  155.384507] X8: 0xffffffc0fd6714a0:
May  4 09:46:06 deadfire3 kernel: [  155.389535] 14a0  75616c5f 0068636e 00000000 00000000 ef048640 ffffffc0 0000bc59 00000000
May  4 09:46:06 deadfire3 kernel: [  155.398120] 14c0  fffa6180 ffffffc0 fd671000 ffffffc0 fffa6180 ffffffc0 012005c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.406709] 14e0  00000000 00000000 012005c0 ffffffc0 012005c0 ffffffc0 013b04a0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.415281] 1500  fb2903c0 ffffffc0 01460168 ffffffc0 e0f63880 ffffffc0 e0f63880 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.423848] 1520  00086ae0 ffffffc0 9ad796f0 0000007f 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.432424] 1540  00000000 40240000 00000000 00000000 00000000 40240000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.440998] 1560  00000000 00000000 00000000 40026000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.449572] 1580  00000001 00000000 00000001 00000000 00000000 40000000 00000000 40000000
May  4 09:46:06 deadfire3 kernel: [  155.458155]
May  4 09:46:06 deadfire3 kernel: [  155.458155] X9: 0xffffffc0e0f63800:
May  4 09:46:06 deadfire3 kernel: [  155.463182] 3800  fc016418 ffffffc0 00000001 00000000 00ffef58 ffffffc0 00ffef68 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.471777] 3820  00000000 00000000 00324d08 00324d08 e0f63890 ffffffc0 000868c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.480361] 3840  ffffffff 00000000 e0f63a30 ffffffc0 00fff020 ffffffc0 0105ed28 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.488948] 3860  fd671000 ffffffc0 00000025 00000000 00000100 00000000 00390084 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.497538] 3880  00324d18 ffffffc0 00003958 ffffffc0 e0f638c0 ffffffc0 00089fc4 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.506118] 38a0  00000001 00000000 01001468 ffffffc0 e0f63a30 ffffffc0 e0f60000 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.514704] 38c0  e0f63900 ffffffc0 0008a0dc ffffffc0 e0f63a30 ffffffc0 e0f60000 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.523290] 38e0  96000044 00000000 01001468 ffffffc0 20000145 00000000 0008a0c8 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.531874]
May  4 09:46:06 deadfire3 kernel: [  155.531874] X10: 0xffffffc0e4941d40:
May  4 09:46:06 deadfire3 kernel: [  155.536991] 1d40  00000002 00000000 e4941d48 ffffffc0 e4941d48 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.545572] 1d60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.554143] 1d80  0126d148 ffffffc0 fa24a400 ffffffc0 e4941d88 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.562716] 1da0  e48cbde0 ffffffc0 00000020 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.571285] 1dc0  ffffffff 0000ffff 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.579853] 1de0  42000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.588419] 1e00  00100100 dead0000 00200200 dead0000 00000000 00000000 d0b3c000 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.596990] 1e20  00000000 00000000 00000000 00000000 ffffffff 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.605574]
May  4 09:46:06 deadfire3 kernel: [  155.605574] X11: 0xffffffc0e4941d40:
May  4 09:46:06 deadfire3 kernel: [  155.610692] 1d40  00000002 00000000 e4941d48 ffffffc0 e4941d48 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.619269] 1d60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.627841] 1d80  0126d148 ffffffc0 fa24a400 ffffffc0 e4941d88 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.636428] 1da0  e48cbde0 ffffffc0 00000020 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.645001] 1dc0  ffffffff 0000ffff 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.653582] 1de0  42000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.662161] 1e00  00100100 dead0000 00200200 dead0000 00000000 00000000 d0b3c000 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.670733] 1e20  00000000 00000000 00000000 00000000 ffffffff 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.679323]
May  4 09:46:06 deadfire3 kernel: [  155.679323] X19: 0xffffffc0fa22d780:
May  4 09:46:06 deadfire3 kernel: [  155.684440] d780  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.693015] d7a0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.701577] d7c0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.710146] d7e0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.718711] d800  00000001 00000001 00000000 00000000 00000001 00000000 d5be3da0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.727270] d820  ef9dd023 ffffffff 00000000 00000000 00000000 00000000 00000253 00000002
May  4 09:46:06 deadfire3 kernel: [  155.735843] d840  00000000 00000000 00000000 00000000 00000000 00000000 001c2000 001c2000
May  4 09:46:06 deadfire3 kernel: [  155.744417] d860  9991d000 0000007f e0f63ce8 ffffffc0 01014f70 ffffffc0 e0f63dd0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.753002]
May  4 09:46:06 deadfire3 kernel: [  155.753002] X22: 0xffffffc0fc016388:
May  4 09:46:06 deadfire3 kernel: [  155.758116] 6388  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.766707] 63a8  00000000 00000000 00000000 00000000 00000000 00000000 001c2000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.775278] 63c8  00000000 00000000 00000000 00000000 00000000 00000000 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  155.783863] 63e8  00000000 00000000 fc001cc0 ffffffc0 fa22db48 ffffffc0 fa22db48 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.792433] 6408  fc016408 ffffffc0 fc016408 ffffffc0 36e836e7 025d025d 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.800998] 6428  00040004 00000000 fc016430 ffffffc0 fc016430 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.809564] 6448  00040004 00000000 fc016450 ffffffc0 fc016450 ffffffc0 02980500 ffffff80
May  4 09:46:06 deadfire3 kernel: [  155.818136] 6468  00000000 00000000 00000000 00000000 00000040 00000001 00000001 00000001
May  4 09:46:06 deadfire3 kernel: [  155.826714]
May  4 09:46:06 deadfire3 kernel: [  155.826714] X23: 0xffffffc0fc016378:
May  4 09:46:06 deadfire3 kernel: [  155.831830] 6378  fc016370 ffffffc0 fc001cc0 ffffffc0 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.840410] 6398  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.848976] 63b8  00000000 00000000 001c2000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.857560] 63d8  00000000 00000000 00000001 00000000 00000000 00000000 fc001cc0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.866138] 63f8  fa22db48 ffffffc0 fa22db48 ffffffc0 fc016408 ffffffc0 fc016408 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.874703] 6418  36e836e7 025d025d 00000000 00000000 00040004 00000000 fc016430 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.883280] 6438  fc016430 ffffffc0 00000000 00000000 00040004 00000000 fc016450 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.891845] 6458  fc016450 ffffffc0 02980500 ffffff80 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.900425]
May  4 09:46:06 deadfire3 kernel: [  155.900425] X26: 0xffffffc0fc015b40:
May  4 09:46:06 deadfire3 kernel: [  155.905541] 5b40  00000040 00000001 00000001 00000001 00000002 00000000 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  155.914115] 5b60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.922680] 5b80  00008119 00000000 00000000 00000000 fc33d740 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.931261] 5ba0  00000000 00000000 00000000 00000000 00000004 00000000 012a83f0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.939819] 5bc0  00000000 00000000 00000000 00000000 fd5cd958 ffffffc0 fc015298 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.948391] 5be0  fc0120e8 ffffffc0 00000004 00000000 fc015f20 ffffffc0 00010001 00000000
May  4 09:46:06 deadfire3 kernel: [  155.956960] 5c00  00000000 00000000 00000000 00010001 00010001 00000000 fc015fd0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  155.965541] 5c20  fc001d40 ffffffc0 00000000 00000000 00000001 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.974130]
May  4 09:46:06 deadfire3 kernel: [  155.974130] X27: 0xffffffc0fc016398:
May  4 09:46:06 deadfire3 kernel: [  155.979245] 6398  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.987817] 63b8  00000000 00000000 001c2000 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  155.996395] 63d8  00000000 00000000 00000001 00000000 00000000 00000000 fc001cc0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.004968] 63f8  fa22db48 ffffffc0 fa22db48 ffffffc0 fc016408 ffffffc0 fc016408 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.013536] 6418  36e836e7 025d025d 00000000 00000000 00040004 00000000 fc016430 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.022111] 6438  fc016430 ffffffc0 00000000 00000000 00040004 00000000 fc016450 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.030679] 6458  fc016450 ffffffc0 02980500 ffffff80 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.039260] 6478  00000040 00000001 00000001 00000001 00000004 00000000 00000001 00000254
May  4 09:46:06 deadfire3 kernel: [  156.047842]
May  4 09:46:06 deadfire3 kernel: [  156.047842] X29: 0xffffffc0e0f63ad0:
May  4 09:46:06 deadfire3 kernel: [  156.052960] 3ad0  000ffdb8 dead0000 00000005 00000000 fc016408 ffffffc0 fc0163f8 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.061554] 3af0  00000200 00000000 00000100 00000000 fc015bc0 ffffffc0 fc016418 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.070133] 3b10  00000001 00000000 e0f63b50 ffffffc0 00750058 ffffffc0 e0f63b50 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.078715] 3b30  00750060 ffffffc0 20000145 00000000 00000005 00000000 fc016408 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.087283] 3b50  e0f63bb0 ffffffc0 00750370 ffffffc0 fc015bc0 ffffffc0 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  156.095893] 3b70  fc0161e8 ffffffc0 dc99b9c0 ffffffc0 00c31238 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.104465] 3b90  00000000 00000000 e0f63d70 ffffffc0 dc9f21c0 ffffffc0 dc99b9c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.113042] 3bb0  e0f63bd0 ffffffc0 0073d5c4 ffffffc0 fc0161e8 ffffffc0 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  156.121608]
May  4 09:46:06 deadfire3 kernel: [  156.123162] Process frontend_launch (pid: 1110, stack limit = 0xffffffc0e0f60058)
May  4 09:46:06 deadfire3 kernel: [  156.130723] Stack: (0xffffffc0e0f63b50 to 0xffffffc0e0f64000)
May  4 09:46:06 deadfire3 kernel: [  156.136546] 3b40:                                     e0f63bb0 ffffffc0 00750370 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.144814] 3b60: fc015bc0 ffffffc0 00000001 00000000 fc0161e8 ffffffc0 dc99b9c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.153077] 3b80: 00c31238 ffffffc0 00000000 00000000 00000000 00000000 e0f63d70 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.161343] 3ba0: dc9f21c0 ffffffc0 dc99b9c0 ffffffc0 e0f63bd0 ffffffc0 0073d5c4 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.169605] 3bc0: fc0161e8 ffffffc0 00000001 00000000 e0f63c00 ffffffc0 0073d848 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.177870] 3be0: fc0161e8 ffffffc0 00000001 00000000 012a72d0 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.186133] 3c00: e0f63c20 ffffffc0 0073f028 ffffffc0 dc99b9c0 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.194396] 3c20: e0f63c40 ffffffc0 00729bb4 ffffffc0 fc015bd0 ffffffc0 40045613 00000000
May  4 09:46:06 deadfire3 kernel: [  156.202657] 3c40: e0f63c50 ffffffc0 0072dda4 ffffffc0 e0f63ce0 ffffffc0 0072db10 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.210920] 3c60: 00000000 00000000 40045613 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.219184] 3c80: e0f63d70 ffffffc0 00000001 00000000 dcb13220 0000007f 00000004 00000000
May  4 09:46:06 deadfire3 kernel: [  156.227447] 3ca0: 00000004 00000000 dc99b9c0 ffffffc0 dc9f21c0 ffffffc0 dcb12f18 00000001
May  4 09:46:06 deadfire3 kernel: [  156.235710] 3cc0: 00000009 00000000 00000015 00000000 00000116 00000000 000000d3 00000000
May  4 09:46:06 deadfire3 kernel: [  156.243972] 3ce0: e0f63df0 ffffffc0 0072dc28 ffffffc0 fc015bd0 ffffffc0 fc015fe8 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.252234] 3d00: 40045613 00000000 ffffffed 00000000 dcb13220 0000007f dc99b9c0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.260499] 3d20: 00000116 00000000 0000001d 00000000 01228000 ffffffc0 e0f60000 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.268760] 3d40: 00518b00 00000000 0072dc30 ffffffc0 e0f63da0 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.277022] 3d60: 00000000 00000000 00000000 00000000 00000001 ffffffc0 00000002 00000000
May  4 09:46:06 deadfire3 kernel: [  156.285283] 3d80: faf535d0 ffffffc0 00000001 00000000 faf535c0 ffffffc0 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.293548] 3da0: 2d1f0002 434cffef 00000000 00000000 e041f280 ffffffc0 00000005 00000000
May  4 09:46:06 deadfire3 kernel: [  156.301813] 3dc0: e0f63df0 ffffffc0 009ab6a8 ffffffc0 e0f63de0 ffffffc0 00b6b5f0 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.310078] 3de0: e0f63e00 ffffffc0 0072897c ffffffc0 e0f63e00 ffffffc0 007289a4 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.318342] 3e00: e0f63e40 ffffffc0 001be4c4 ffffffc0 dcb13220 0000007f fd6d2380 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.326608] 3e20: 00000018 00000000 dcb13220 0000007f 40045613 00000000 00000001 00000000
May  4 09:46:06 deadfire3 kernel: [  156.334872] 3e40: e0f63e50 ffffffc0 001bf194 ffffffc0 e0f63e80 ffffffc0 001bf274 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.343132] 3e60: dc99b9c0 ffffffc0 00000000 00000000 e0f63e80 ffffffc0 001bf258 ffffffc0
May  4 09:46:06 deadfire3 kernel: [  156.351390] 3e80: dcb13160 0000007f 000853c8 ffffffc0 dcb13230 0000007f dcb13230 0000007f
May  4 09:46:06 deadfire3 kernel: [  156.359649] 3ea0: ffffffff ffffffff 9b2c210c 0000007f 20000000 00000000 00000015 00000000
May  4 09:46:06 deadfire3 kernel: [  156.367908] 3ec0: 80000000 00000000 00001148 00000001 00000018 00000000 40045613 00000000
May  4 09:46:06 deadfire3 kernel: [  156.376168] 3ee0: dcb13220 0000007f dcb13220 0000007f dcb13108 0000007f 00000002 00000000
May  4 09:46:06 deadfire3 kernel: [  156.384427] 3f00: 004a6d08 00000000 49444956 535f434f 0000001d 00000000 fefefeff fefefefe
May  4 09:46:06 deadfire3 kernel: [  156.392686] 3f20: 7f7f7f7f 7f7f7f7f 01010101 01010101 00000000 00000000 e8000000 00000003
May  4 09:46:06 deadfire3 kernel: [  156.400945] 3f40: 00000000 00000000 9b346588 0000007f 9a50b310 0000007f 9b2c2100 0000007f
May  4 09:46:06 deadfire3 kernel: [  156.409205] 3f60: dcb123f8 0000007f dcb13230 0000007f dcb13230 0000007f 00422610 00000000
May  4 09:46:06 deadfire3 kernel: [  156.417464] 3f80: dcb13300 0000007f dcb13c50 0000007f 9a530000 0000007f dcb13320 0000007f
May  4 09:46:06 deadfire3 kernel: [  156.425724] 3fa0: 0040f3b0 00000000 0040f3e0 00000000 dcb13310 0000007f dcb13160 0000007f
May  4 09:46:06 deadfire3 kernel: [  156.433981] 3fc0: 9a4ebaec 0000007f dcb13160 0000007f 9b2c210c 0000007f 20000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.442241] 3fe0: 00000018 00000000 0000001d 00000000 00000000 00000000 00000000 00000000
May  4 09:46:06 deadfire3 kernel: [  156.450479] Call trace:
May  4 09:46:06 deadfire3 kernel: [  156.453001] [&amp;lt;ffffffc000750060&amp;gt;] tegra_channel_queued_buf_done+0x6c/0x168
May  4 09:46:06 deadfire3 kernel: [  156.459866] [&amp;lt;ffffffc000750370&amp;gt;] tegra_channel_stop_streaming+0x54/0xc8
May  4 09:46:06 deadfire3 kernel: [  156.466560] [&amp;lt;ffffffc00073d5c4&amp;gt;] __vb2_queue_cancel+0x30/0xa8
May  4 09:46:06 deadfire3 kernel: [  156.472380] [&amp;lt;ffffffc00073d848&amp;gt;] vb2_streamoff+0xac/0x124
May  4 09:46:06 deadfire3 kernel: [  156.477846] [&amp;lt;ffffffc00073f028&amp;gt;] vb2_ioctl_streamoff+0x44/0x50
May  4 09:46:06 deadfire3 kernel: [  156.483751] [&amp;lt;ffffffc000729bb4&amp;gt;] v4l_streamoff+0x1c/0x24
May  4 09:46:06 deadfire3 kernel: [  156.489129] [&amp;lt;ffffffc00072dda4&amp;gt;] __video_do_ioctl+0x174/0x284
May  4 09:46:06 deadfire3 kernel: [  156.494940] [&amp;lt;ffffffc00072db10&amp;gt;] video_usercopy+0x1e4/0x2e8
May  4 09:46:06 deadfire3 kernel: [  156.500576] [&amp;lt;ffffffc00072dc28&amp;gt;] video_ioctl2+0x14/0x1c
May  4 09:46:06 deadfire3 kernel: [  156.505870] [&amp;lt;ffffffc0007289a4&amp;gt;] v4l2_ioctl+0x70/0x134
May  4 09:46:06 deadfire3 kernel: [  156.511082] [&amp;lt;ffffffc0001be4c4&amp;gt;] vfs_ioctl+0x1c/0x44
May  4 09:46:06 deadfire3 kernel: [  156.516120] [&amp;lt;ffffffc0001bf194&amp;gt;] do_vfs_ioctl+0x220/0x22c
May  4 09:46:06 deadfire3 kernel: [  156.521598] [&amp;lt;ffffffc0001bf274&amp;gt;] SyS_ioctl+0xd4/0x17c
May  4 09:46:06 deadfire3 kernel: [  156.526723] Code: 2a1503e1 97ffb642 f941aa60 f941a662 (f9000440)
May  4 09:46:06 deadfire3 kernel: [  156.539082] ---[ end trace 1cec99130188edfd ]---

&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;</description><category>kernel</category><category>linux</category><guid>https://www.joshbialkowski.com/posts/2018/nvidia_kernel_channel/nvidia-kernel-channel.html</guid><pubDate>Mon, 08 Jan 2018 00:00:00 GMT</pubDate></item></channel></rss>